<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ji-Chul+Ryu</id>
	<title>Mech - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://hades.mech.northwestern.edu//api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ji-Chul+Ryu"/>
	<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php/Special:Contributions/Ji-Chul_Ryu"/>
	<updated>2026-05-19T10:00:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22224</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22224"/>
		<updated>2013-07-31T02:18:46Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The video of this work can be viewed at [http://vimeo.com/54405698 http://vimeo.com/54405698].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual (see [[Media:DiskOnDisk_Setup.doc]]), we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
[[File:exp_schematic.jpg|center|x330px]]&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_power.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The control algorithm is implemented in [SampleLoopTask::Task() in SampleLoopTask.C]. There is a feedforward model for the motor in [motor.C/h], which calculates the torque (current).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The camera triggering and communication happens in this loop as well. A trigger pulse is sent to the frame grabber to take a picture. See the related codes in [VisionNet.C/h] that is modified from [MatlabNet.C/h]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Codes===&lt;br /&gt;
* [[Media:QnxKit.zip]]: The codes running on the QNX machine. The control algorithm is implemented in this codes.&lt;br /&gt;
* [[Media:Vision.zip]]: The codes running on the vision computer. It tracks dots and sends the position data to the QNX machine through TCP/IP.&lt;br /&gt;
* [[Media:QnxMatlab.zip]]: The codes running on the host computer. Data sent from the QNX machine is collected on the host computer using this Matlab codes.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22223</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22223"/>
		<updated>2013-07-31T02:12:54Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Experimental Set-up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The video of this work can be viewed at [http://vimeo.com/54405698 http://vimeo.com/54405698].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual (see [[Media:DiskOnDisk_Setup.doc]]), we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
[[File:exp_schematic.jpg|center|x330px]]&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_power.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The control algorithm is implemented in [SampleLoopTask::Task() in SampleLoopTask.C]. There is a feedforward model for the motor in [motor.C/h], which calculates the torque (current).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The camera triggering and communication happens in this loop as well. A trigger pulse is sent to the frame grabber to take a picture. See the related codes in [VisionNet.C/h] that is modified from [MatlabNet.C/h]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:DiskOnDisk_Setup.doc&amp;diff=22222</id>
		<title>File:DiskOnDisk Setup.doc</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:DiskOnDisk_Setup.doc&amp;diff=22222"/>
		<updated>2013-07-31T02:11:18Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project.  Set-up manual.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project.  Set-up manual.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Vision.zip&amp;diff=22221</id>
		<title>File:Vision.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Vision.zip&amp;diff=22221"/>
		<updated>2013-07-31T02:02:20Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. The vision codes running on the vision computer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. The vision codes running on the vision computer.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:QnxMatlab.zip&amp;diff=22220</id>
		<title>File:QnxMatlab.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:QnxMatlab.zip&amp;diff=22220"/>
		<updated>2013-07-31T02:01:31Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project. Matlab codes on the host computer for data logging.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project. Matlab codes on the host computer for data logging.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:QnxKit.zip&amp;diff=22219</id>
		<title>File:QnxKit.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:QnxKit.zip&amp;diff=22219"/>
		<updated>2013-07-31T02:00:32Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project. The codes running on the QNX machine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project. The codes running on the QNX machine.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22218</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22218"/>
		<updated>2013-07-31T01:57:17Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Amplifier Set-up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The video of this work can be viewed at [http://vimeo.com/54405698 http://vimeo.com/54405698].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
[[File:exp_schematic.jpg|center|x330px]]&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_power.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The control algorithm is implemented in [SampleLoopTask::Task() in SampleLoopTask.C]. There is a feedforward model for the motor in [motor.C/h], which calculates the torque (current).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The camera triggering and communication happens in this loop as well. A trigger pulse is sent to the frame grabber to take a picture. See the related codes in [VisionNet.C/h] that is modified from [MatlabNet.C/h]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Junus_power.jpg&amp;diff=22217</id>
		<title>File:Junus power.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Junus_power.jpg&amp;diff=22217"/>
		<updated>2013-07-31T01:56:39Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project.  Junus amp to power connection.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project.  Junus amp to power connection.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22216</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22216"/>
		<updated>2013-07-31T01:42:08Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* QNX (PC104) System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The video of this work can be viewed at [http://vimeo.com/54405698 http://vimeo.com/54405698].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
[[File:exp_schematic.jpg|center|x330px]]&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The control algorithm is implemented in [SampleLoopTask::Task() in SampleLoopTask.C]. There is a feedforward model for the motor in [motor.C/h], which calculates the torque (current).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The camera triggering and communication happens in this loop as well. A trigger pulse is sent to the frame grabber to take a picture. See the related codes in [VisionNet.C/h] that is modified from [MatlabNet.C/h]&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22215</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22215"/>
		<updated>2013-07-31T00:40:02Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Tasks Accomplished */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;The video of this work can be viewed at [http://vimeo.com/54405698 http://vimeo.com/54405698].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
[[File:exp_schematic.jpg|center|x330px]]&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Dio_port.jpg&amp;diff=22214</id>
		<title>File:Dio port.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Dio_port.jpg&amp;diff=22214"/>
		<updated>2013-07-31T00:35:09Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: uploaded a new version of &amp;amp;quot;File:Dio port.jpg&amp;amp;quot;: disk-on-disk rolling manipulation, DIO I/O Ports structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation: digital IO port structure&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22213</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22213"/>
		<updated>2013-07-30T22:54:46Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Experimental Set-up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
[[File:exp_schematic.jpg|center|x330px]]&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Exp_schematic.jpg&amp;diff=22212</id>
		<title>File:Exp schematic.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Exp_schematic.jpg&amp;diff=22212"/>
		<updated>2013-07-30T21:37:52Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation, experimental set-up schematics&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation, experimental set-up schematics&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22211</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22211"/>
		<updated>2013-07-30T21:30:57Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* QNX (PC104) System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The encoder board, MSI-P404-8: 8 encoder channels. Each channel takes in the A and B channels of a single-ended encoder and returns the encoder count using the function GetEncoderCount().&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The analog output board, Ruby-1612-XT (Diamond Systems Corp.): 16 analog outputs (12-bit resolution).  To set and output to a single channel, use the function WriteAnalogCh(ch, val).  To set a value to be output, use SetAnalogOut(ch, val); to actually output this value, ProcessOutput() must be called.  The pinout is in the figure below.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:AO_board.jpg]]&lt;br /&gt;
 &amp;lt;li&amp;gt;The digital I/O board, 104-DIO-48E(Acces I/O products, inc.); There are 6 digital I/O ports on the 104-DIO-48E digital I/O board  as well as 3 more on the analog output board.  The port and pin structure is shown below. ReadDigitalBit(bit) and WriteDigitalBit(bit, state) functions directly read/write bits whereas GetDigitalInBit(bit) and SetDigitalOutBit(bit, state) are effective after calling ProcessInput() and ProcessOutput(), respectively.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Dio_port.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Dio_port.jpg&amp;diff=22210</id>
		<title>File:Dio port.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Dio_port.jpg&amp;diff=22210"/>
		<updated>2013-07-30T20:58:15Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation: digital IO port structure&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation: digital IO port structure&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:AO_board.jpg&amp;diff=22209</id>
		<title>File:AO board.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:AO_board.jpg&amp;diff=22209"/>
		<updated>2013-07-30T20:13:43Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project. QNX, analog output board pin-out&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project. QNX, analog output board pin-out&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22208</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22208"/>
		<updated>2013-07-30T19:52:05Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* QNX (PC104) System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
* &#039;&#039;&#039;Communication and uploading code&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;I/O [IoHardware and individual board drivers]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Code: control loop and vision data receiving&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;MATLAB communication/data logging [MatlabNet]&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;This opens a TCP/IP socket connection with the host PC.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Every time through the control loop, the output (num[]) is added to the buffer.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;The number of data points to be sent can be changed in the MatlabNet.h file (#define MATLAB_NET_NUM_CH) and must also be changed in the MATLAB code.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;To run the MATLAB code, go to the QnxMatlab folder.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run &amp;quot;rtplot.m&amp;quot; and click on the start button.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22207</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22207"/>
		<updated>2013-07-30T19:00:36Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[File:Disk_schematic.jpg|right|250px]][[File:Disk_exp.jpg|right|250px]]&lt;br /&gt;
==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host PC, set a static IP address. For example, with leaving the rest blank,&amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.10&lt;br /&gt;
  Subnet mask: 255.255.255.0&lt;br /&gt;
 &amp;lt;li&amp;gt;The target PC (QNX machine) also has a static IP. This can be changed in [/etc/system/sysinit] &amp;lt;/li&amp;gt;&lt;br /&gt;
  IP address: 192.168.1.65&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a command prompt window and enter &amp;quot;telent 192.168.1.65&amp;quot;. Both the login and password are &amp;quot;root&amp;quot;. (NOTE: if you want to use alias such as &amp;quot;telnet qnx&amp;quot;, add a line &amp;quot;192.168.1.65 qnx&amp;quot;, spaced by a Tab, in the file [C:\WINDOWS\system32\drivers\etc\hosts].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the host, open a second command prompt window and go to the directory containing the code you wish to upload to the QNX machine. &amp;quot;make put&amp;quot; will act the same way as &amp;quot;make&amp;quot; and also send the executable to the target PC using the wput function.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Your code is now on the QNX machine and ready to execute.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22206</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22206"/>
		<updated>2013-07-30T18:16:21Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Amplifier Set-up */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Complete wiring using the following table.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:amp_signal_J1.jpg|200px]]  [[File:amp_signal_J2.jpg|400px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Amp_signal_J2.jpg&amp;diff=22205</id>
		<title>File:Amp signal J2.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Amp_signal_J2.jpg&amp;diff=22205"/>
		<updated>2013-07-30T18:01:47Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project. Junus amp wiring J2 Signal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project. Junus amp wiring J2 Signal&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Amp_signal_J1.jpg&amp;diff=22204</id>
		<title>File:Amp signal J1.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Amp_signal_J1.jpg&amp;diff=22204"/>
		<updated>2013-07-30T18:01:15Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. Junus amp wiring J1 signal&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. Junus amp wiring J1 signal&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22203</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22203"/>
		<updated>2013-07-30T17:13:33Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf http://www.copleycontrols.com/motion/pdf/Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: ‎[[Media:Usb-serial-driver.zip]])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Download and install CME2 (Copley Motion Explorer2) from [http://www.copleycontrols.com/Motion/Downloads/index.html http://www.copleycontrols.com/Motion/Downloads/index.html].&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Set the mode and parameters according to the motor you are using.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_mode.jpg|x250px]]  [[File:Junus_acmd.jpg|x250px]]  [[File:Junus_param.jpg|x250px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;&#039;Auto Tune&#039; will automatically find the PI controller parameters for your motor.&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_iloop.jpg|x250px]]  &lt;br /&gt;
 &amp;lt;li&amp;gt;Check the tracking of the input current by running the menu [Amplifier]-[Scope]&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Junus_scope.jpg|x250px]]&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|x400px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Junus_scope.jpg&amp;diff=22202</id>
		<title>File:Junus scope.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Junus_scope.jpg&amp;diff=22202"/>
		<updated>2013-07-30T16:59:47Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. Junus amp set-up: oscilloscope result&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. Junus amp set-up: oscilloscope result&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Junus_iloop.jpg&amp;diff=22201</id>
		<title>File:Junus iloop.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Junus_iloop.jpg&amp;diff=22201"/>
		<updated>2013-07-30T16:59:26Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. Junus amp set-up: current loop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. Junus amp set-up: current loop&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Junus_param.jpg&amp;diff=22200</id>
		<title>File:Junus param.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Junus_param.jpg&amp;diff=22200"/>
		<updated>2013-07-30T16:59:12Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. Junus amp set-up: motor parameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. Junus amp set-up: motor parameter&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Junus_acmd.jpg&amp;diff=22199</id>
		<title>File:Junus acmd.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Junus_acmd.jpg&amp;diff=22199"/>
		<updated>2013-07-30T16:58:56Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. Junus amp set-up: analog command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. Junus amp set-up: analog command&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Junus_mode.jpg&amp;diff=22198</id>
		<title>File:Junus mode.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Junus_mode.jpg&amp;diff=22198"/>
		<updated>2013-07-30T16:58:28Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. Junus amp set-up: operating mode&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. Junus amp set-up: operating mode&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Usb-serial-driver.zip&amp;diff=22197</id>
		<title>File:Usb-serial-driver.zip</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Usb-serial-driver.zip&amp;diff=22197"/>
		<updated>2013-07-30T16:37:22Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. USB to RS232 connection driver for Junus Amp.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. USB to RS232 connection driver for Junus Amp.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22196</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22196"/>
		<updated>2013-07-30T16:35:59Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: [http://www.copleycontrols.com/motion/pdf/Junus.pdf Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Using the USB to RS-232 cable, connect the amp to your PC (Install the driver: [[File:&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|600px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22195</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22195"/>
		<updated>2013-07-30T16:31:21Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
&#039;&#039;&#039;While the detail of the experimental set-up procedure is written in the manual here, we briefly present it here as follows.&#039;&#039;&#039; The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Connect the output of a DC power supply of 48 V to +HV and GND terminals of the amp using the following diagram. (Junus amp data sheets: &amp;quot;[http://www.copleycontrols.com/motion/pdf/Junus.pdf Junus.pdf])&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|600px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Disk_schematic.jpg&amp;diff=22194</id>
		<title>File:Disk schematic.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Disk_schematic.jpg&amp;diff=22194"/>
		<updated>2013-07-29T21:14:33Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation. schematics.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation. schematics.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Disk_exp.jpg&amp;diff=22193</id>
		<title>File:Disk exp.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Disk_exp.jpg&amp;diff=22193"/>
		<updated>2013-07-29T21:13:44Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project. experimental set-up (close)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project. experimental set-up (close)&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22192</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22192"/>
		<updated>2013-07-29T21:04:55Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the qnx program by typing ./qnxkit&amp;lt;/li&amp;gt;&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|600px]]&lt;br /&gt;
 &amp;lt;li&amp;gt;Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&amp;lt;/li&amp;gt; &lt;br /&gt;
 &amp;lt;li&amp;gt;Then, click the two dots to track and press &#039;q&#039;.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;If something goes wrong with the motor, press &#039;q&#039; to quit the program.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22191</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22191"/>
		<updated>2013-07-29T20:52:30Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|200px]]&lt;br /&gt;
# Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&lt;br /&gt;
# Then, click the two dots to track and press &#039;q&#039;.&lt;br /&gt;
# On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&lt;br /&gt;
# By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&lt;br /&gt;
# If something goes wrong with the motor, press &#039;q&#039; to quit the program.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22190</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22190"/>
		<updated>2013-07-29T20:51:42Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
[[File:Qnxkit_cmd.jpg|200px|thumb|left|alt text]]&lt;br /&gt;
# Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&lt;br /&gt;
# Then, click the two dots to track and press &#039;q&#039;.&lt;br /&gt;
# On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&lt;br /&gt;
# By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&lt;br /&gt;
# If something goes wrong with the motor, press &#039;q&#039; to quit the program.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=File:Qnxkit_cmd.jpg&amp;diff=22189</id>
		<title>File:Qnxkit cmd.jpg</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=File:Qnxkit_cmd.jpg&amp;diff=22189"/>
		<updated>2013-07-29T20:50:37Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: disk-on-disk rolling manipulation project. QNX running screen captured.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;disk-on-disk rolling manipulation project. QNX running screen captured.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22188</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22188"/>
		<updated>2013-07-29T20:45:17Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
  # ./qnxkit&lt;br /&gt;
# Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&lt;br /&gt;
# Then, click the two dots to track and press &#039;q&#039;.&lt;br /&gt;
# On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&lt;br /&gt;
# By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&lt;br /&gt;
# If something goes wrong with the motor, press &#039;q&#039; to quit the program.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22187</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22187"/>
		<updated>2013-07-29T20:44:46Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&amp;lt;br /&amp;gt;  # ./qnxkit&lt;br /&gt;
# Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&lt;br /&gt;
# Then, click the two dots to track and press &#039;q&#039;.&lt;br /&gt;
# On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&lt;br /&gt;
# By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&lt;br /&gt;
# If something goes wrong with the motor, press &#039;q&#039; to quit the program.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22186</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22186"/>
		<updated>2013-07-29T20:44:28Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&amp;lt;br /&amp;gt;# ./qnxkit&lt;br /&gt;
# Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&lt;br /&gt;
# Then, click the two dots to track and press &#039;q&#039;.&lt;br /&gt;
# On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&lt;br /&gt;
# By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&lt;br /&gt;
# If something goes wrong with the motor, press &#039;q&#039; to quit the program.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22185</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22185"/>
		<updated>2013-07-29T20:39:49Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
   # ./qnxkit&lt;br /&gt;
# Run the vision program [QNX Tracking.sln] on the vision computer. Run F5 on [qnx tracking.cpp].&lt;br /&gt;
# Then, click the two dots to track and press &#039;q&#039;.&lt;br /&gt;
# On the qnx interface, type &#039;c&#039;. Then it starts to calculate the control command (but, no current command is sent to the motor yet).&lt;br /&gt;
# By pressing &#039;m&#039;, the motor will now be enabled and start to run the control action.&lt;br /&gt;
# If something goes wrong with the motor, press &#039;q&#039; to quit the program.&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22184</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22184"/>
		<updated>2013-07-29T20:33:34Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
   # ./qnxkit;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22183</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22183"/>
		<updated>2013-07-29T20:33:05Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
  # ./qnxkit;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22182</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22182"/>
		<updated>2013-07-29T20:32:51Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
 &amp;gt;&amp;gt; ./qnxkit;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22181</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22181"/>
		<updated>2013-07-29T20:32:39Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit;&lt;br /&gt;
 #define rs_kbhit              (rs_nextIn != rs_nextOut)&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22180</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22180"/>
		<updated>2013-07-29T20:32:31Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit;&lt;br /&gt;
  #define rs_kbhit              (rs_nextIn != rs_nextOut)&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22179</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22179"/>
		<updated>2013-07-29T20:32:23Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit;&lt;br /&gt;
#define rs_kbhit              (rs_nextIn != rs_nextOut)&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22178</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22178"/>
		<updated>2013-07-29T20:32:12Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit;&lt;br /&gt;
  #define rs_kbhit              (rs_nextIn != rs_nextOut)&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22177</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22177"/>
		<updated>2013-07-29T20:31:15Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit;&lt;br /&gt;
&lt;br /&gt;
  #define rs_kbhit              (rs_nextIn != rs_nextOut)&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22176</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22176"/>
		<updated>2013-07-29T20:24:34Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: /* Running the Program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit;&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
	<entry>
		<id>https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22175</id>
		<title>Disk-on-Disk Rolling Manipulation Project</title>
		<link rel="alternate" type="text/html" href="https://hades.mech.northwestern.edu//index.php?title=Disk-on-Disk_Rolling_Manipulation_Project&amp;diff=22175"/>
		<updated>2013-07-29T20:22:17Z</updated>

		<summary type="html">&lt;p&gt;Ji-Chul Ryu: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
Nonprehensile manipulation primitives such as rolling, sliding, pushing, and throwing are commonly used by humans but are often avoided by robots, who generally use grasping. Dynamic nonprehensile manipulation raises challenges in high-speed sensing and control, as the manipulated object is not in static equilibrium throughout the process which would be the case with standard grasping. An advantage, however, is that dynamics can be exploited to help the robot control object motions that would otherwise be impossible. Our long-term goal is to develop a unified framework for planning and control of dynamic robotic manipulation. A typical manipulation plan consists of a sequence of manipulation primitives chosen from a library of primitives, with each primitive equipped with its own feedback controller. Problems of interest include planning the motion of the manipulator to achieve the desired motion of the object and feedback control to stabilize the desired trajectory. As a first step to understand the nature of dynamic nonprehensile manipulation, we study feedback stabilization of a canonical rolling problem:  balancing a disk-shaped object on top of a disk-shaped manipulator (referred to as the hand) in a vertical plane.&lt;br /&gt;
&lt;br /&gt;
==Tasks Accomplished==&lt;br /&gt;
The balancing task of stabilization at the upright position is extended to more difficult problems when having the hand or object &lt;br /&gt;
* rotate to a specific orientation, or &lt;br /&gt;
* spin at a constant velocity. &lt;br /&gt;
We constrain the motion of the circular hand to rotation about its center. We derive control laws that stabilize the object to the balanced position under the kinematic assumption of rolling at all times.  The basin of attraction is reduced when the contact is modeled using Coulomb friction, but it is still large with large friction coefficients. This work is successfully implemented using high-speed vision feedback.&lt;br /&gt;
&lt;br /&gt;
==Publication==&lt;br /&gt;
The initial version of this work which only deals with the balancing problem was presented at the 2012 ICRA.&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpls/abs_all.jsp?arnumber=6225044&amp;amp;tag=1 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, 2012 IEEE International Conference on Robotics and Automation (ICRA), pp. 3232–3237, 2012.&lt;br /&gt;
The completed version of the two advanced tasks is being published in IEEE TRO (online version available).&lt;br /&gt;
* J. Ryu, F. Ruggiero, and K. M. Lynch, &amp;quot;[http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=6522171&amp;amp;sortType%3Dasc_p_Sequence%26filter%3DAND%28p_IS_Number%3A4359257%29 Control of nonprehensile rolling manipulation: Balancing a disk on a disk]&amp;quot;, IEEE Transactions on Robotics, 2013.&lt;br /&gt;
&lt;br /&gt;
==Experimental Set-up==&lt;br /&gt;
While the details of the experimental set-up procedure are written in the manual here, we briefly present it here as follows. The hand is the lower disk, actuated by a harmonic drive DC motor (Harmonic Drive RH-8D 6006) equipped with a 50:1 harmonic drive gearhead and a 500 ppr quadrature encoder giving 100,000 counts per revolution at the output shaft. The commanded current input to the motor is provided through a motor amplifier (Copley Controls Junus 800-1468). The disk-on-disk system is mounted on an air table that provides frictionless support in a plane tilted 79.0 degrees with respect to horizontal (98.2 % of full gravity). Both hand and object are made of 1/4-inch thick acrylic and the object is encircled by a rubber band to increase friction.&lt;br /&gt;
&lt;br /&gt;
The hand control algorithm runs on a PC104 stack with a QNX real-time operating system (RTOS). In addition to the angular position data from the encoder of the hand, the controller utilizes the state of the object disk, which is determined using a high-speed vision system. The vision system, consisting of a PhotonFocus TrackCam camera, a Microenable III frame grabber, and a Windows PC, tracks two markers on the disk at 800 Hz, allowing estimation of the position and orientation of the disk at 800 Hz.  The vision program, written in C++, sends the orientation of the disk to the controller PC104 stack via TCP/IP. The tracking markers may be high contrast passive markers (e.g., black on white) or active markers (LEDs in the current implementation).&lt;br /&gt;
&lt;br /&gt;
===Amplifier Set-up===&lt;br /&gt;
&lt;br /&gt;
===QNX (PC104) System===&lt;br /&gt;
&lt;br /&gt;
===Running the Program===&lt;br /&gt;
# Vision Calibration: After mounting a camera, you must do the calibration. Due to the way the program is coded, you also need to find the center position of the upper disk at the upright position.&lt;br /&gt;
# Run the qnx program by typing ./qnxkit&lt;br /&gt;
&amp;gt;&amp;gt; ./qnxkit&lt;/div&gt;</summary>
		<author><name>Ji-Chul Ryu</name></author>
	</entry>
</feed>