logging.xml

This example application shows the usage of scripts.

Models used

File contents

  1<?xml version="1.0" encoding="UTF-8"?>
  2
  3<!-- This example application shows the usage of scripts.
  4
  5-->
  6
  7<pitasc>
  8
  9    <models>
 10        <include package="pitasc_library" file="models/pitasc.xml"/>
 11        <include package="pitasc_library" file="models/skills.xml"/>
 12
 13        <include package="pitasc_library" file="universal_robots/ur.xml"/>
 14    </models>
 15
 16    <clone prototype="project">
 17
 18        <member id="configuration">
 19            <clone id="configuration" prototype="default_configuration"/>
 20        </member>
 21
 22        <member id="environment">
 23            <clone prototype="robot_ur5">
 24                <member id="robot_driver.max_velocity">0.5</member>
 25                <member id="robot_driver.max_acceleration">2.0</member>
 26                <member id="components">
 27                    <clone prototype="force_sensor">
 28                        <member id="wrench_topic">wrench</member>
 29                    </clone>
 30                </member>
 31            </clone>
 32        </member>
 33
 34        <member id="applications">
 35            <clone prototype="skill_sequence">
 36
 37                <member id="robot" reference_id="environment.robot_ur5"/>
 38
 39                <member id="skills">
 40
 41                    <clone id="skill" prototype="skill_lin">
 42                        <member id="tool_frame">tool</member>
 43                        <member id="target_frame">start_position</member>
 44
 45                        <member id="scripts">
 46                            <!-- log the pose control error -->
 47                            <clone prototype="script_error_logger">
 48                                <member id="controllers" reference_id="tasks.tracking.controllers"/>
 49                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %T}_error_lin.csv</member>
 50                            </clone>
 51                        </member>
 52                    </clone>
 53
 54                    <clone prototype="skill_push_settle">
 55                        <member id="tool_frame">tool</member>
 56                        <member id="force_frame">start_position</member>
 57                        <member id="axes">z</member>
 58                        <member id="target_forces">30</member>
 59                        <member id="compliance">0.0005</member>
 60                        <member id="corner_frequency">7</member>
 61
 62                        <member id="scripts">
 63                            <!-- log the force control error -->
 64                            <clone prototype="script_error_logger">
 65                                <member id="controllers" reference_id="force.tasks.apply_force.controllers"/>
 66                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}/{time %H_%M_%S}_error_push.csv</member>
 67                            </clone>
 68                        </member>
 69                    </clone>
 70
 71                    <clone prototype="skill_lin">
 72                        <member id="tool_frame">tool</member>
 73                        <member id="target_frame">start_position</member>
 74                    </clone>
 75
 76                    <clone prototype="skill_guarded_approach">
 77                        <member id="control_frame">start_position</member>
 78                        <member id="tool_frame">tool</member>
 79                        <member id="axes">z</member>
 80                        <member id="velocities">0.02</member>
 81                        <member id="max_forces">10.0</member>
 82
 83                        <member id="scripts">
 84                            <!-- log the whole chain, means all forces and torques -->
 85                            <clone prototype="script_measurement_logger">
 86                                <member id="provider" reference_id="force_skill.collections.force_chain.chains"/>
 87                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_forceAndTorque_approach.csv</member>
 88                                <!-- filter is an optional argument. Can be omitted when you want to log the complete chain -->
 89                                <!-- <member id="filter">force_chain/x, force_chain/y, force_chain/z, force_chain/a, force_chain/b, force_chain/c</member> -->
 90                            </clone>
 91
 92                            <!-- log the force in z-direction using a filter -->
 93                            <clone prototype="script_measurement_logger">
 94                                <member id="provider" reference_id="force_skill.collections.force_chain.chains"/>
 95                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_z_force_approach.csv</member>
 96                                <member id="filter">force_chain/z</member>
 97                            </clone>
 98
 99                            <!-- log xy target to tool position and z rotation using a filter -->
100                            <clone prototype="script_measurement_logger">
101                                <member id="provider" reference_id="move_skill.collections.target_to_tool.chains"/>
102                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_position_xy_approach.csv</member>
103                                <member id="filter">target_to_tool/x, target_to_tool/y, target_to_tool/c</member>
104                            </clone>
105
106                            <!-- log z target to tool position with simple filter keys -->
107                            <clone prototype="script_measurement_logger">
108                                <member id="provider" reference_id="move_skill.collections.target_to_tool.chains"/>
109                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_position_z_approach.csv</member>
110                                <member id="use_simple_filter_keys">True</member>  <!-- allows to specify the filter without the chain... -->
111                                <member id="filter">z</member>  <!-- ...then you dont need to specify the chain here. Also works for force chains -->
112                            </clone>
113                        </member>
114                    </clone>
115
116                    <clone prototype="skill_lin">
117                        <member id="tool_frame">tool</member>
118                        <member id="target_frame">target1</member>
119                        <member id="scripts">
120                            <!-- log the desired position (setpoint) with simple filter keys -->
121                            <clone prototype="script_measurement_logger">
122                                <member id="provider" reference_id="tasks.tracking.setpoint_generators"/>
123                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_skill_lin_setpoint.csv</member>
124                                <member id="use_simple_filter_keys">True</member>  <!-- allows to specify the filter without the chain... -->
125                                <member id="filter">x,y,z</member>  <!-- ...then you dont need to specify the chain here. Also works for force chains -->
126                            </clone>
127                            <!-- log the current position with simple filter keys -->
128                            <clone prototype="script_measurement_logger">
129                                <member id="provider" reference_id="collections.target_to_tool.chains"/>
130                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_skill_lin_current_position.csv</member>
131                                <member id="use_simple_filter_keys">True</member>  <!-- allows to specify the filter without the chain... -->
132                                <member id="filter">x,y,z</member>  <!-- ...then you dont need to specify the chain here. Also works for force chains -->
133                            </clone>
134                            <!-- log the desired (setpoint) and current position in the same file -->
135                            <clone prototype="script_measurement_logger">
136                                <member id="provider">
137                                    <reference reference_id="tasks.tracking.setpoint_generators.setpoint" />
138                                    <reference reference_id="collections.target_to_tool.chains[0]" />
139                                </member>
140                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_skill_lin_setpoint_and_current_position.csv</member>
141                                <member id="use_simple_filter_keys">True</member>  <!-- allows to specify the filter without the chain... -->
142                                <member id="filter">x,y,z</member>  <!-- ...then you dont need to specify the chain here. Also works for force chains -->
143                            </clone>
144                        </member>
145                    </clone>
146
147                    <!-- log position, rotation and/or force during a skill_sequence -->
148                    <!-- use logging skills concurrent to the actual skills -->
149                    <clone prototype="skill_concurrency">
150                        <member id="skills">
151                            <!-- log tool pose (position and rotation) in base_link coordinates -->
152                            <clone prototype="skill_log_cartesian">
153                                <member id="measured_frame">tool</member>
154                                <member id="reference_frame">base_link</member>
155                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_pose_tool_to_base.csv</member>
156                                <!-- filter is an optional argument. Can be omitted when you want to log the complete chain -->
157                                <!-- <member id="filter">x, y, z, a, b, c</member> -->
158                            </clone>
159
160                            <!-- log tool yz position in base_link coordinates using a filter-->
161                            <clone prototype="skill_log_cartesian">
162                                <member id="measured_frame">tool</member>
163                                <member id="reference_frame">base_link</member>
164                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_yz_position_tool_to_base.csv</member>
165                                <member id="filter">y,z</member>  <!-- (in logging *skills* you dont need to specify the chain) -->
166                            </clone>
167
168                            <!-- log tool rotation in base_link coordinates using a filter-->
169                            <clone prototype="skill_log_cartesian">
170                                <member id="measured_frame">tool</member>
171                                <member id="reference_frame">base_link</member>
172                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_rotation_tool_to_base.csv</member>
173                                <member id="filter">a,b,c</member>  <!-- (in logging *skills* you dont need to specify the chain) -->
174                            </clone>
175
176                            <!-- log force at tool frame in tool coordinates, using a filter-->
177                            <clone prototype="skill_log_force">
178                                <member id="force_frame">tool</member>
179                                <member id="file_name">{rospkg pitasc_common}/examples/scripts/logs/{time %F}_force_tool.csv</member>
180                                <member id="filter">x,y,z</member>  <!-- (in logging *skills* you dont need to specify the chain) -->
181                            </clone>
182
183                            <!-- the actual robot skills, running concurrently to the logging skills -->
184                            <clone prototype="skill_sequence">
185                                <member id="skills">
186                                    <clone prototype="skill_lin">
187                                        <member id="tool_frame">tool</member>
188                                        <member id="target_frame">start_position</member>
189                                    </clone>
190
191                                    <clone prototype="skill_push_settle">
192                                        <member id="tool_frame">tool</member>
193                                        <member id="force_frame">start_position</member>
194                                        <member id="axes">z</member>
195                                        <member id="target_forces">30</member>
196                                        <member id="compliance">0.0005</member>
197                                        <member id="corner_frequency">7</member>
198                                    </clone>
199                                </member>
200                            </clone>
201                        </member>
202                    </clone>
203
204                    <!-- publish measurements to a ros topic-->
205                    <clone prototype="skill_lin">
206                        <member id="tool_frame">tool</member>
207                        <member id="target_frame">target1</member>
208                        <member id="scripts">
209                            <!-- publish measurements to a ros topic-->
210                            <clone prototype="script_measurement_publisher">
211                                <member id="provider" reference_id="collections.target_to_tool.chains[0]"/>
212                                <member id="topic">tool_position</member>
213                                <member id="coordinates">x,y,z</member>
214                            </clone>
215                        </member>
216                    </clone>
217
218                </member>
219            </clone>
220        </member>
221
222    </clone>
223
224</pitasc>