DH Wizard

a tool to understand and generate Denavit-Hartenberg parameters for an arbitrary kinematic structure

Student: Leland C. Thorpe

objective overview DH Wizard summary

Objective

The Denavit-Hartenberg convention is a powerful method for modeling robotic arms, as well as any other kinematic structure. Hwwever, it is difficult to learn and time-consuming to use. Therefore, I sought to build a GUI tool which could accurately represent kinematic chains both structurally and visually, allowing the user to explore a given manipulator as well as generating his own. Ideally, this will have applications both for the experienced engineer when seeking to model a new arm as well as for the student who is trying to learn the DH convention.

Overview

.kin files

Tekkotsu represents a kinematic chain in an XML-based document known as a .kin file. Kinematic chains are stored sequentially in <array> elements. Each chain is composed of <dict> elements which represent individual joints, and <array> elements which indicate branching.


<?xml version="1.0"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"><array>
<dict>
	<key>JointType</key> <string>revolute</string>
	<key>theta</key>         <real>0</real>
	<key>d</key>         <real>0</real>
	<key>alpha</key>         <real>0</real>
	<key>r</key>         <real>0</real>
	<key>qOffset</key>   <real>0</real>
	<key>Min</key>       <real>0</real>
	<key>Max</key>       <real>0</real>
	<key>Mass</key>      <real>3.280</real>
	<key>CenterOfMass</key><array>
		<real>-75</real>  <real>0</real>  <real>0</real>
	</array>
	<key>Model</key>     <string>Chiara/Body</string>
	<key>Name</key>      <string>BaseFrame</string>
</dict>

<!-- HEAD / CAMERA -->
<array>
	<dict>
		<key>JointType</key> <string>revolute</string>
		<key>theta</key>         <real>0 </real>
		<key>d</key>         <real>383.916</real>
		<key>alpha</key>         <real>0</real>
		<key>r</key>         <real>75.230</real>
		<key>qOffset</key>   <real>0 </real>
		<key>Min</key>       <real>-150 </real>
		<key>Max</key>       <real>150 </real>
		<key>Mass</key>      <real>0.0775</real>
		<key>Model</key>     <string>Chiara/Pan</string>
		<key>Name</key>      <string>NECK:pan</string>
		<key>IKSolver</key>  <string>IKThreeLink</string>
	</dict>
	<dict>
		<key>JointType</key> <string>revolute</string>
		<key>theta</key>         <real>0</real>
		<key>d</key>         <real>-39</real>
		<key>alpha</key>         <real>90 </real>
		<key>r</key>         <real>22.5</real>
		<key>qOffset</key>   <real>0</real>
		<key>Min</key>       <real>-92 </real>
		<key>Max</key>       <real>75 </real>
		<key>Mass</key>      <real>0.1175</real>
		<key>Model</key>     <string>Chiara/Tilt</string>
		<key>Name</key>      <string>NECK:tilt</string>
		<key>IKSolver</key>  <string>IKThreeLink</string>
	</dict>
	<dict>
		<key>JointType</key> <string>revolute</string>
		<key>theta</key>         <real>90 </real>
		<key>d</key>         <real>0</real>
		<key>alpha</key>         <real>90 </real>
		<key>r</key>         <real>0</real>
		<key>qOffset</key>   <real>0</real>
		<key>Min</key>       <real>0</real>
		<key>Max</key>       <real>0</real>
	</dict>
	<dict>
		<key>JointType</key> <string>prismatic</string>
		<key>theta</key>         <real>90 </real>
		<key>d</key>         <real>41</real>
		<key>alpha</key>         <real>0</real>
		<key>r</key>         <real>0</real>
		<key>qOffset</key>   <real>0</real>
		<key>Min</key>       <real>0</real>
		<key>Max</key>       <real>0</real>
		<key>Visible</key>   <false/>
		<key>Model</key>     <string>ReferenceFrame</string>
		<key>Name</key>      <string>CameraFrame</string>
		<key>IKSolver</key>  <string>IKThreeLink</string>
		<key>Visible</key>   <false/>
	</dict>
</array>
<!-- SNIP -->
</array></plist>


click here to view the full Chiara kinematic file

Mirage and Ogre3D

Ogre3D is a 3D graphics library which Ethan Tira-Thompson has used to build Mirage, a virtual word for robots to live in. The Mirage server communicates with client programs over a network socket and speaks .kin, which allows Tekkotsu to interface with it.

The Wizard

A screenshot:

As it currently stands, the wizard is a graphical interface for exploring and modifying a .kin file. Upon launch, it reads a .kin file and displays it as a tree structure, allowing the user to modify the four DH parameters for each joint, as well as setting whether or not a joint is prismatic or revolute, and then save that structure out to a .kin file again.

The source is available here: DHwizard.tar

usage

Upon unpacking the DHwizard directory, DHWizard can be executed as a java program. It expects one or two command-line arguments: the first argument must be a .kin filename, and the second (optional) argument is a server name to which the wizard will attempt to connect (over port 19785).

Current Status and Future Work

The DHWizard currently understands .kin files and displays them in an intuitive manner. Unfortunately, I haven't completely figured out the communications protocol with Mirage, so that functionality is still lacking. In addition, the Wizard can currently only modify the parameters for existing joints; the ability to add or remove joints is not yet present.