logging.xml
This example application shows the usage of scripts.
Models used
script_error_logger: lines 47, 64
script_measurement_logger: lines 85, 93, 100, 107, 121, 128, 135
script_measurement_publisher: lines 210
skill_concurrency: lines 149
skill_guarded_approach: lines 76
skill_lin: lines 41, 71, 116, 186, 205
skill_log_cartesian: lines 152, 161, 169
skill_log_force: lines 177
skill_push_settle: lines 54, 191
skill_sequence: lines 35, 184
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>