Actin  Version 5.5.5
Software for Robotics Simulation and Control
Manipulator Attachments

Actin models support the ability to attach manipulators within the model. This is useful if you wish to attach a gripper manipulator to the end of an arm manipulator, or if you wish to attach an arm manipulator to a mobile robot manipulator.

Manipulator Attachment Plugin

To configure attachments in the ActinViewer, we use the Manipulator Attachment Plugin. To use this plugin, load the manipAttachmentPlugin.ecp.

After loading the plugin, a menu item "Manipulator Attachment" gets added to the "Edit" menu as shown in Figure below.

manipAttachmentMenu.png
ManipulatorAttachment Menu

Clicking this menu item renders a dock widget "Edit Manipulator Attachments" as shown in the Figure below.

manipAttachmentWidget.png
Manipulator Attachment Widget

If there are no attachments in the simulation, then there will be no items in the table.

noAttachments.png

If there are attachments in the simulation, then the table will be populated with the list of attachments.

manipAttachmentWidgetRover.png
Manipulator Attachment Widget

Add a Manipulator Attachment

To add an attachment, there needs to be at least two manipulators in the simulation. We do not support attachments to the same manipulator (self attachments), but if you wish to fix one link to another link on the same manipulator, we support this by using a relative frame motion constraint (See here for information on creating constraints).

To add an attachment, press the "Add Attachment" button [+]. In the "Edit/Add Attachment" dialog you can specify which manipulator you wish to attach to a link on another manipulator.

addManipAttachment.png
Add Manipulator Attachment

The "Dependent" manipulator is the manipulator that you wish to attach. You can think of the "Dependent" manipulator as the "child" manipulator.

The "Base" manipulator is the manipulator that you wish to attach the "Dependent" manipulator on to. You can think of the "Base" manipulator as the "parent" manipulator.

Note
We only support attaching the base link of the "child" manipulator to any link on the "parent" manipulator.

The offset is a transformation between the selected links that will be applied when they are attached. if you click "Use Current" then the offset will be populated with the current offset in the simulation. This allows you to manually move the manipulator into the desired position, then attach it as configured.

To attach the base link of the arm to the base link of the rover in this example, we select the "UR5" robot as the Dependent (child) manipulator and the "EOD Robot" rover as the Base (parent) manipulator. We also select the base link of the base manipulator to attach to. We specify a transformation between these links to determine where to attach. This is the transformation from the Base (parent) link primary frame to the "child" manipulator base link primary frame.

attachURToBase.png
Attaching arm to rover

This will result in the arm being attached to the rover base. If the rover base is moved with the simulation running or stopped, then the arm will remain fixed to the rover base.

URAttached.png
Attached arm to rover

If we wish to attach the gripper to the arm, we follow the same procedure. But for convenience, we can use a named frame to aid in positioning the attachment. In this example, we have a named frame at the wrist link of the arm at the mounting point called "Primary Frame", shown below on the left. the other frame on the right is the primary frame of the gripper base link.

NamedFrames.png

To add this attachment, we select the gripper as the Dependent (child) manipulator and the last link of the UR5 as the Base (parent) link. We also select the named frame and add a 90 degree roll offset because the coordinate systems dont align the exact way we want.

attachGripperToUR.png
Attaching gripper to arm

After clicking OK, the gripper is attached to the arm. If the arm is moved with the simulation running or stopped, then the gripper will remain fixed to the last link of the arm.

Note
Make sure the arm isnt in a collision state with the gripper in order to move the arm. See here for how to exclude collisions
gripperAttached.png
Gripper attached to arm

Load and Save attachments

We can save and load attachments in an .xml or .ecz format using the "Save" and "Load" buttons. The attachments are stored in a map with each entry storing the manipulator indeces and the link identifier.

1 <?xml version="1.0" encoding="UTF-8"?>
2 <manipulatorAttachmentMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3  xsi:schemaLocation="http://www.energid.com/namespace/mn
4  UR5GripperRoverAttachmentMap.mn.xsd" xmlns="http://www.energid.com/namespace/mn" version="4.0.20">
5  <lastAttachmentChange>
6  <baseLinkLabelToken>Wrist3-6</baseLinkLabelToken>
7  <baseManipulatorIndexToken>0</baseManipulatorIndexToken>
8  <isAttach>1</isAttach>
9  <manipulatorId>1</manipulatorId>
10  <name></name>
11  <offset>
12  <cr:orientation xmlns:cr="http://www.energid.com/namespace/cr" q0=".7071067811865476" q1=".7071067811865476" q2="-0" q3="0"/>
13  <translation x="0" y="0" z="0"/>
14  </offset>
15  </lastAttachmentChange>
16  <manipulatorAttachmentNodeVector size="1">
17  <element>
18  <childNodes size="1">
19  <element>
20  <childNodes size="1">
21  <element>
22  <childNodes size="0"/>
23  <linkIndentifier>Wrist3-6</linkIndentifier>
24  <manipulatorId>1</manipulatorId>
25  <name></name>
26  <offset>
27  <cr:orientation xmlns:cr="http://www.energid.com/namespace/cr" q0=".7071067811865476" q1=".7071067811865476" q2="-0" q3="0"/>
28  <translation x="0" y="0" z="0"/>
29  </offset>
30  </element>
31  </childNodes>
32  <linkIndentifier>EOD Robot</linkIndentifier>
33  <manipulatorId>0</manipulatorId>
34  <name></name>
35  <offset>
36  <cr:orientation xmlns:cr="http://www.energid.com/namespace/cr" q0=".7071067811865476" q1=".7071067811865476" q2="-0" q3="0"/>
37  <translation x="-.05" y="-.126424" z=".1"/>
38  </offset>
39  </element>
40  </childNodes>
41  <linkIndentifier></linkIndentifier>
42  <manipulatorId>2</manipulatorId>
43  <name></name>
44  <offset>
45  <cr:orientation xmlns:cr="http://www.energid.com/namespace/cr" q0="1" q1="0" q2="0" q3="0"/>
46  <translation x="0" y="0" z="0"/>
47  </offset>
48  </element>
49  </manipulatorAttachmentNodeVector>
50 </manipulatorAttachmentMap>