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

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>