3. Robot Arm Geometry: Understanding Link Design and Joint Angles
Understanding the geometry of a robot arm is essential to control and manipulate it effectively. In this article, we will discuss the design of robot arm links, how their position and orientation are determined by joint angles, and how the create_link
function creates robot arm links with the given length, angle, and thickness. Please refer to the 2R pickandplace robot simulation on GitHub.
3.1. Robot Arm Links and Joint Angles
A robot arm consists of links connected by joints. The links, typically rigid bodies, define the arm’s structure, while the joints, either revolute (rotational) or prismatic (linear), allow relative motion between the links. The joint angles, denoted by theta
for revolute joints, control the position and orientation of each link in the robot arm.
In the case of a 2R robot arm, we have two revolute joints connecting three links, including the base link. The position and orientation of the second and third links are determined by the angles of the first and second joints, theta_1
and theta_2
respectively.
3.2. Link Lengths
The choice of link lengths is crucial for the robot arm’s reachability and workspace. Longer links result in a larger workspace, allowing the robot arm to reach farther. However, longer links may also lead to reduced precision and stability due to increased deflections and vibrations. Therefore, the link lengths should be chosen based on the specific application and requirements.
3.3. The create_link
Function
The create_link
function is used to create robot arm links with the given length, angle, and thickness. This function takes three input arguments: length, angle, and thickness, and returns a link object. The link object has a length attribute representing its length, an angle attribute representing its angle with respect to the previous link, and a thickness attribute representing its thickness.
def create_link(length, angle, thickness):
link = Link(length, angle, thickness)
return link
Using the create_link
function, we can create a robot arm by specifying the desired link lengths, joint angles, and thicknesses. The position and orientation of each link are determined by the joint angles, as explained earlier.
3.4. Conclusion
In conclusion, understanding the geometry of a robot arm is critical for effective control and manipulation. The design of the robot arm, including the choice of link lengths, and the position and orientation of each link determined by the joint angles, plays a vital role in the robot arm’s performance. The create_link
function helps us create robot arm links with the specified length, angle, and thickness, enabling us to model and simulate various robot arm configurations.
3.5. Exercise
Example 1 

Consider a 2R robot arm with two revolute joints and link lengths L1 and L2. Given the joint angles 
Solution:
To compute the position (x, y) of the endeffector, we use the following trigonometric equations:
\[\begin{align*}
x &= L1 \times cos(\theta_1) + L2 \times cos(\theta_1 + \theta_2) \\
y &= L1 \times sin(\theta_1) + L2 \times sin(\theta_1 + \theta_2)
\end{align*}\]
Here’s a Python function to calculate the endeffector position: 

Example 2 

Given a 2R robot arm with link lengths L1 and L2, derive the equations for the workspace boundary, assuming that the robot arm can fully extend and rotate its joints between \(0\) and \(\pi\) radians. 
Solution:
To derive the workspace boundary, we need to find the minimum and maximum values of x and y. Since the robot arm can fully extend and rotate its joints between \(0\) and \(\pi\) radians, we can obtain the minimum and maximum values by analyzing the trigonometric equations. The minimum and maximum x values occur when the robot arm is fully extended in the positive and negative xdirections:
\[\begin{align*}
x_{min} &=  (L1 + L2) \\
x_{max} &= L1 + L2
\end{align*}\]
The minimum and maximum y values occur when the robot arm is fully extended upwards and downwards:
\[\begin{align*}
y_{min} &= 0 \\
y_{max} &= L1 + L2
\end{align*}\]
Thus, the workspace boundary is defined by the following equations:
\[\begin{align*}
x_{min} <= x <= x_{max} \\
y_{min} <= y <= y_{max}
\end{align*}\]

Add Comment
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
 Your name, rating, website address, town, country, state and comment will be publicly displayed if entered.
 Aside from the data entered into these form fields, other stored data about your comment will include:
 Your IP address (not displayed)
 The time/date of your submission (displayed)
 Your email address will not be shared. It is collected for only two reasons:
 Administrative purposes, should a need to contact you arise.
 To inform you of new comments, should you subscribe to receive notifications.
 A cookie may be set on your computer. This is used to remember your inputs. It will expire by itself.
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
 Although the administrator will attempt to moderate comments, it is impossible for every comment to have been moderated at any given time.
 You acknowledge that all comments express the views and opinions of the original author and not those of the administrator.
 You agree not to post any material which is knowingly false, obscene, hateful, threatening, harassing or invasive of a person's privacy.
 The administrator has the right to edit, move or remove any comment for any reason and without notice.
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comments (2)
Hey there. The sample values used in Example one bring about the following error in the function when executed:
" imeWarning: invalid value encountered in arccos "
I suggest using the following values instead L1 = 2 , L2 = 1 , x=2 , y = 1
I'd really like if you would explain to me Inverse Kinematics for a sixDoF robot, because All the tutorials and resources are not for such robots.