temp_frame.xml
This example application shows the usage of the script_temp_frame_from_force. This is helpful for example when you do not know the orientation of a surface, but want to appply forces perpendicular to it.
Models used
monitor_duration: lines 117, 137
monitor_threshold: lines 57, 86
script_sinus_frame: lines 145
script_temp_frame_from_force: lines 77
skill_cartesian_tracking: lines 132
skill_concurrency: lines 130
skill_guarded_slide: lines 101
skill_lin: lines 42, 124
skill_push: lines 49, 69
skill_sequence: lines 34
File contents
1<?xml version="1.0" encoding="UTF-8"?>
2
3<!-- This example application shows the usage of the script_temp_frame_from_force. This is helpful for example when you do not know the orientation of a surface, but want to appply forces perpendicular to it.
4-->
5
6<pitasc>
7
8 <models>
9 <include package="pitasc_library" file="models/pitasc.xml"/>
10 <include package="pitasc_library" file="models/skills.xml"/>
11
12 <include package="pitasc_library" file="universal_robots/ur.xml"/>
13 </models>
14
15 <clone prototype="project">
16
17 <member id="configuration">
18 <clone id="configuration" prototype="default_configuration"/>
19 </member>
20
21 <member id="environment">
22 <clone prototype="robot_ur5">
23 <member id="robot_driver.max_velocity">2.0</member>
24 <member id="robot_driver.max_acceleration">3.0</member>
25 <member id="components">
26 <clone prototype="force_sensor">
27 <member id="wrench_topic">wrench</member>
28 </clone>
29 </member>
30 </clone>
31 </member>
32
33 <member id="applications">
34 <clone prototype="skill_sequence">
35
36 <member id="robot" reference_id="environment.robot_ur5"/>
37
38 <!-- Skills -->
39 <member id="skills">
40
41
42 <clone prototype="skill_lin">
43 <member id="tool_frame">tool</member>
44 <member id="target_frame">start_position</member>
45 <member id="target_offsets">0,0,0,0.7,0,0</member>
46 </clone>
47
48 <!-- Pushes in z direction to get contact to the surface -->
49 <clone id="force_skill" prototype="skill_push">
50 <member id="tool_frame">tool</member>
51 <member id="force_frame">tool</member>
52 <member id="axes">z</member>
53 <member id="target_forces">10</member>
54 <member id="compliance">0.001</member>
55 <member id="corner_frequency">7</member>
56 <member id="monitors">
57 <clone id="force_out_threshold" prototype="monitor_threshold">
58 <member id="provider" reference_id="force.collections.force_chain.chains[0]"/>
59 <member id="coordinates">x,y,z</member>
60 <member id="prefix" reference_id="force.collections.force_chain.prefix"/>
61 <member id="operator">absolute_greater</member>
62 <member id="thresholds">10</member> <!-- TODO Parameter?-->
63 <member id="multi_coordinates_handling">vector_norm</member>
64 </clone>
65 </member>
66 </clone>
67
68 <!-- Pushes in the direction of the measured force -->
69 <clone prototype="skill_push">
70 <member id="tool_frame">tool</member>
71 <member id="force_frame">force_oriented_tool_frame</member>
72 <member id="axes">z</member>
73 <member id="target_forces">50</member>
74 <member id="compliance">0.001</member>
75 <member id="corner_frequency">7</member>
76 <member id="scripts">
77 <clone prototype="script_temp_frame_from_force">
78 <member id="frame">force_oriented_tool_frame</member>
79 <member id="source">tool</member>
80 <member id="parent" reference_id="robot.base_link"/>
81 <member id="low_pass_filter_gain">0.01</member>
82 <member id="tf_broadcast">true</member>
83 </clone>
84 </member>
85 <member id="monitors">
86 <clone id="force_out_threshold" prototype="monitor_threshold">
87 <member id="provider" reference_id="force.collections.force_chain.chains[0]"/>
88 <member id="coordinates">x,y,z</member>
89 <member id="prefix" reference_id="force.collections.force_chain.prefix"/>
90 <member id="operator">absolute_greater</member>
91 <member id="thresholds">40</member>
92 <member id="multi_coordinates_handling">vector_norm</member>
93 </clone>
94
95
96 </member>
97 </clone>
98
99 <!-- Moves in the direction of the previously calculated measured force frame.
100 This frame still exists if it hasn't been invalidated at the end of the script. -->
101 <clone prototype="skill_guarded_slide">
102 <member id="tool_frame">tool</member>
103 <member id="control_frame">force_oriented_tool_frame</member>
104
105 <!-- moving -->
106 <member id="move_axes">y</member>
107 <member id="velocities">0.02</member>
108
109 <!-- pushing -->
110 <member id="force_axes">z</member>
111 <member id="target_forces">5.0</member>
112
113 <member id="max_forces">10</member>
114
115 <!-- transition -->
116 <member id="monitors">
117 <clone prototype="monitor_duration">
118 <member id="duration">2.0</member>
119 </clone>
120 </member>
121 </clone>
122
123
124 <clone prototype="skill_lin">
125 <member id="tool_frame">tool</member>
126 <member id="target_frame">target1</member>
127 </clone>
128
129 <!-- track a sinus modulated frame -->
130 <clone prototype="skill_concurrency">
131 <member id="skills">
132 <clone prototype="skill_cartesian_tracking">
133 <member id="tool_frame">tool</member>
134 <member id="target_frame">my_sinus_frame</member>
135 <member id="linear_controller_gain">7</member>
136 <member id="monitors">
137 <clone prototype="monitor_duration">
138 <member id="duration">6.0</member>
139 </clone>
140 </member>
141 </clone>
142 </member>
143
144 <member id="scripts">
145 <clone prototype="script_sinus_frame">
146 <member id="frame">my_sinus_frame</member> <!-- name of the sinus modulated frame -->
147 <member id="source">target1</member> <!-- which frame should be taken -->
148 <member id="parent">base_link</member> <!-- where to hang frame on -->
149 <member id="amplitude">0.02</member>
150 <member id="period">4</member>
151 <member id="coordinate">y</member> <!-- which coordinate should be modulated -->
152 <member id="tf_broadcast">true</member>
153 </clone>
154 </member>
155 </clone>
156
157 </member>
158
159 </clone>
160 </member>
161
162 </clone>
163
164</pitasc>