switch_skill_with_rosservice.xml
This example shows how to switch skills on runtime using an external trigger, namely a ros service. Once you reached skill1, you can switch between skill1 and skill2 by calling the rosservice specified in the change_skill_monitor. From terminal: rosservice call /switch_skill “event: ‘change_to_skill2’” ` (resp. `change_to_skill1 to switch back)
Models used
monitor_ros_fireevent_service: lines 40
skill_idle: lines 61, 73
skill_lin: lines 48
skill_statechart: lines 35
File contents
1<?xml version="1.0" encoding="UTF-8"?>
2
3<!-- This example shows how to switch skills on runtime using an external trigger, namely a ros service.
4Once you reached skill1, you can switch between skill1 and skill2 by calling the rosservice specified in the change_skill_monitor.
5From terminal: `rosservice call /switch_skill "event: 'change_to_skill2'" ` (resp. `change_to_skill1` to switch back)
6-->
7
8<pitasc>
9
10 <models>
11 <include package="pitasc_library" file="models/pitasc.xml"/>
12 <include package="pitasc_library" file="models/skills.xml"/>
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">2.0</member>
25 <member id="robot_driver.max_acceleration">3.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 id="main_skill" prototype="skill_statechart">
36 <member id="robot" reference_id="environment.robot_ur5"/>
37
38 <!-- Monitor which listens to skill switching service. Should be on top level -->
39 <member id="monitors">
40 <clone id="change_skill_monitor" prototype="monitor_ros_fireevent_service">
41 <member id="service_name">switch_skill</member>
42 </clone>
43 </member>
44
45 <member id="initial_skill">move_to_start</member>
46
47 <member id="skills">
48 <clone id="move_to_start" prototype="skill_lin">
49 <member id="tool_frame">tool</member>
50 <member id="target_frame">target1</member>
51 <member id="transitions">
52 <clone prototype="transition">
53 <member id="event">succeeded</member>
54 <member id="target">skill1</member>
55 </clone>
56 </member>
57 </clone>
58
59 <!-- Transitions define which skill follows on which event (specified in service call)-->
60 <!-- The skill switching monitor must be referenced here-->
61 <clone id="skill1" prototype="skill_idle">
62 <member id="transitions">
63 <clone prototype="transition">
64 <member id="event">change_to_skill2</member>
65 <member id="target">skill2</member>
66 </clone>
67 </member>
68 <member id="monitors">
69 <reference reference_id="main_skill.monitors.change_skill_monitor" />
70 </member>
71 </clone>
72
73 <clone id="skill2" prototype="skill_idle">
74 <member id="transitions">
75 <clone prototype="transition">
76 <member id="event">change_to_skill1</member>
77 <member id="target">skill1</member>
78 </clone>
79 </member>
80 <member id="monitors">
81 <reference reference_id="main_skill.monitors.change_skill_monitor" />
82 </member>
83 </clone>
84
85 </member>
86
87 </clone>
88 </member>
89
90 </clone>
91
92</pitasc>