a tool to understand and generate Denavit-Hartenberg parameters for an arbitrary kinematic structure
Student: Leland C. Thorpe
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.
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
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.
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
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).
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.