Skip to content

Commit fa34656

Browse files
committed
Add README on how to create a DH model
1 parent 5d12cef commit fa34656

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed

roboticstoolbox/models/DH/README.md

Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
# Creating a new robot model using Denavit-Hartenberg parameters
2+
3+
To begin, you must know:
4+
5+
1. The DH parameters for your robot.
6+
2. Whether the model uses standard or modified Denavit-Hartenberg parameters, DH or MDH respectively.
7+
3. The joint structure, does it have revolute, prismatic joints or both.
8+
9+
10+
## Write the definition
11+
12+
Create a file called `MYROBOT.py` where `MYROBOT` is a descriptive name of your
13+
robot that is a valid filename and Python class name.
14+
15+
Cut and paste the code blocks below into your empty file, modifying as you go. We start with the definitions:
16+
17+
18+
```python
19+
from math import pi
20+
import numpy as np
21+
from roboticstoolbox import DHRobot, RevoluteDH, PrismaticDH, RevoluteMDH, PrismaticMDH
22+
```
23+
24+
The last line is important, it defines all the classes you could possibly
25+
need. You won't use all of them, and to be tidy you could delete those you don't use. This is their purpose:
26+
27+
* `RevoluteDH` for a revolute joint using standard DH parameters
28+
* `PrismaticDH` for a prismatic joint using standard DH parameters
29+
* `RevoluteMDH` for a revolute joint using modified DH parameters
30+
* `PrismaticMDH` for a prismatic joint using modified DH parameters
31+
32+
Next, add as much description as you can, check out the other model files in this
33+
folder for inspiration.
34+
35+
```python
36+
class MYROBOT(DHRobot):
37+
"""
38+
Create model of MYROBOT manipulator
39+
40+
.
41+
.
42+
.
43+
44+
:notes:
45+
.
46+
.
47+
.
48+
49+
:references:
50+
.
51+
.
52+
.
53+
54+
"""
55+
```
56+
57+
Always a good idea to have notes about units used, DH convention, and
58+
to include any references to the source of your model.
59+
60+
Now for the main event:. Inside the `__init__` method, define a set of link variables by creating instances of the appropriate link class.
61+
62+
```python
63+
def __init__(self):
64+
65+
deg = pi/180
66+
67+
L0 = RevoluteDH(
68+
d=0, # link length (Dennavit-Hartenberg notation)
69+
a=0, # link offset (Dennavit-Hartenberg notation)
70+
alpha=pi/2, # link twist (Dennavit-Hartenberg notation)
71+
I=[0, 0.35, 0, 0, 0, 0], # inertia tensor of link with respect to
72+
# center of mass I = [L_xx, L_yy, L_zz,
73+
# L_xy, L_yz, L_xz]
74+
r=[0, 0, 0], # distance of ith origin to center of mass [x,y,z]
75+
# in link reference frame
76+
m=0, # mass of link
77+
Jm=200e-6, # actuator inertia
78+
G=-62.6111, # gear ratio
79+
B=1.48e-3, # actuator viscous friction coefficient (measured
80+
# at the motor)
81+
Tc=[0.395, -0.435], # actuator Coulomb friction coefficient for
82+
# direction [-,+] (measured at the motor)
83+
qlim=[-160*deg, 160*deg]) # minimum and maximum joint angle
84+
85+
L1 = RevoluteDH(
86+
d=0, a=0.4318, alpha=0,
87+
qlim=[-45*deg, 225*deg])
88+
89+
.
90+
.
91+
.
92+
93+
```
94+
95+
Provide as many parameters as you can. The definition of `L0` above includes
96+
kinematic and dynamic parameters, whereas `L1` has only kinematic parameters.
97+
The minimum requirement is for the kinematic parameters, and you don't even need
98+
to know the joint limits, they are only required by a small number of Toolbox
99+
functions.
100+
101+
For a robot with N joints you must define N joint instances.
102+
103+
Next we call the superclass constructor to do the heavy lifting.
104+
105+
```python
106+
super(Puma560, self).__init__(
107+
[L0, L1, L2, L3, L4, L5],
108+
name="MYROBOT",
109+
manufacturer="COMPANY THAT BUILDS MYROBOTs")
110+
```
111+
112+
We pass in an ordered list of all the joint objects we created earlier, and add
113+
some metadata. The name gets used in plots.
114+
115+
Finally, we might like to define some useful joint configurations, maybe the home position, or where it goes to pick up a widget. You can
116+
define as many of these as you like, but the pattern looks like this:
117+
118+
```python
119+
# zero angles, L shaped pose
120+
self._MYCONFIG = np.array([1, 2, 3, 4, 5, 6]) # create instance attribute
121+
122+
@property
123+
def MYCONFIG(self):
124+
return self._MYCONFIG
125+
126+
```
127+
where `MYCONFIG` is the name of this particular configuration. Define an instance attribute holding the joint configuration, it must be a
128+
NumPy array with N elements. Then define a property that will return that attribute.
129+
130+
Many of the
131+
Toolbox models have a configuration called `qz` which is the set of zero
132+
joint angles.
133+
134+
135+
## Adding your model to the Toolbox
136+
137+
Edit the file `__init__.py` in this folder. Add a line like:
138+
139+
```python
140+
from roboticstoolbox.models.DH.Stanford import MYROBOT
141+
```
142+
143+
and then add `'MYROBOT'` to the list that defines `__all__`.
144+
145+
## Testing
146+
147+
Now to test your class
148+
149+
```python
150+
myrobot = MYROBOT() # instantiate an instance of your model
151+
print(myrobot) # display its kinematic parameters
152+
print(myrobot.MYCONFIG) # check that the joint configuration works
153+
```
154+
155+
## Next steps
156+
157+
You can now use the power of the Toolbox to compute forward and inverse
158+
kinematics, display a graphical model, and interactively teach the robot.
159+
If you defined dynamic parameters then you can compute forward and inverse
160+
rigid-body dyamics and simulate the response of the robot to applied torques.
161+
162+
Good luck and enjoy!

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy