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

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>