test_plugin.py
Go to the documentation of this file.
1 #!/usr/bin/env python3
2 
3 import unittest
4 
5 import rospy
6 import rostest
7 from gazebo_msgs.msg import ModelState
8 from gazebo_msgs.srv import GetModelState, GetModelStateRequest, GetModelStateResponse
9 from gazebo_msgs.srv import SetModelState, SetModelStateRequest, SetModelStateResponse
10 from geometry_msgs.msg import Pose, Twist, Point, Quaternion, Vector3
11 
12 from boeing_gazebo_model_attachment_plugin.gazebo_client import GazeboModelAttachmentClient
13 
14 
15 class TestPlugin(unittest.TestCase):
16  @classmethod
17  def setUpClass(cls):
18  cls.__set_model_state_srv = rospy.ServiceProxy(
19  name='/gazebo/set_model_state',
20  service_class=SetModelState
21  )
22  cls.__get_model_state_srv = rospy.ServiceProxy(
23  name='/gazebo/get_model_state',
24  service_class=GetModelState
25  )
26 
28  cls.__get_model_state_srv.wait_for_service(timeout=30)
29 
30  def test_attach(self):
31  #
32  # Test Model Attachment
33  #
34 
35  self.__attachment_client.attach(
36  joint_name='test_attachment_box',
37  model_name_1='box',
38  link_name_1='attachment_link',
39  model_name_2='sphere',
40  link_name_2='attachment_link'
41  )
42 
43  self.__attachment_client.attach(
44  joint_name='test_attachment_cylinder',
45  model_name_1='box',
46  link_name_1='attachment_link',
47  model_name_2='cylinder',
48  link_name_2='attachment_link'
49  )
50 
51  # Ensure the sphere is correctly set as a child of the box
52  response = self.__set_model_state_srv.call(
53  SetModelStateRequest(
54  model_state=ModelState(
55  model_name='box',
56  pose=Pose(
57  position=Point(0, 0, 2),
58  orientation=Quaternion(x=0, y=0, z=0, w=1)
59  ),
60  twist=Twist(
61  linear=Vector3(0, 0, 0),
62  angular=Vector3(0, 0, 0)
63  ),
64  reference_frame=''
65  )
66  )
67  )
68  self.assertIsInstance(response, SetModelStateResponse)
69 
70  box_model_state = self.__get_model_state_srv.call(
71  GetModelStateRequest(
72  model_name='box'
73  )
74  )
75  self.assertIsInstance(box_model_state, GetModelStateResponse)
76  self.assertTrue(box_model_state.success)
77 
78  sphere_model_state = self.__get_model_state_srv.call(
79  GetModelStateRequest(
80  model_name='sphere'
81  )
82  )
83  self.assertIsInstance(sphere_model_state, GetModelStateResponse)
84  self.assertTrue(sphere_model_state.success)
85 
86  self.assertEqual(sphere_model_state.pose.position.y,
87  box_model_state.pose.position.y)
88  self.assertEqual(sphere_model_state.pose.position.z,
89  box_model_state.pose.position.z)
90  self.assertEqual(sphere_model_state.twist, box_model_state.twist)
91 
92  #
93  # Test Model Detachment
94  #
95 
96  self.__attachment_client.detach(
97  joint_name='test_attachment_box',
98  model_name_1='box',
99  model_name_2='sphere',
100  )
101 
102  # Ensure Cylinder isn't dropped as a child when the Sphere is
103 
104  response = self.__set_model_state_srv.call(
105  SetModelStateRequest(
106  model_state=ModelState(
107  model_name='box',
108  pose=Pose(
109  position=Point(2, 2, 2),
110  orientation=Quaternion(x=0, y=0, z=0, w=1)
111  ),
112  twist=Twist(
113  linear=Vector3(0, 0, 0),
114  angular=Vector3(0, 0, 0)
115  ),
116  reference_frame=''
117  )
118  )
119  )
120  self.assertIsInstance(response, SetModelStateResponse)
121 
122  box_model_state = self.__get_model_state_srv.call(
123  GetModelStateRequest(
124  model_name='box'
125  )
126  )
127  self.assertIsInstance(box_model_state, GetModelStateResponse)
128  self.assertTrue(box_model_state.success)
129 
130  cylinder_model_state = self.__get_model_state_srv.call(
131  GetModelStateRequest(
132  model_name='cylinder'
133  )
134  )
135  self.assertIsInstance(cylinder_model_state, GetModelStateResponse)
136  self.assertTrue(cylinder_model_state.success)
137 
138  self.assertEqual(cylinder_model_state.pose.position.y,
139  box_model_state.pose.position.y)
140  self.assertEqual(cylinder_model_state.pose.position.z,
141  box_model_state.pose.position.z)
142  self.assertEqual(cylinder_model_state.twist, box_model_state.twist)
143 
144 
145 if __name__ == '__main__':
146  rospy.init_node('test_plugin')
147 
148  rostest.rosrun('boeing_gazebo_model_attachment_plugin',
149  'test_plugin', TestPlugin)
test_plugin.TestPlugin.__set_model_state_srv
__set_model_state_srv
Definition: test_plugin.py:18
test_plugin.TestPlugin.__get_model_state_srv
__get_model_state_srv
Definition: test_plugin.py:22
test_plugin.TestPlugin.__attachment_client
__attachment_client
Definition: test_plugin.py:27
boeing_gazebo_model_attachment_plugin.gazebo_client.GazeboModelAttachmentClient
Definition: gazebo_client.py:13
test_plugin.TestPlugin.setUpClass
def setUpClass(cls)
Definition: test_plugin.py:17
test_plugin.TestPlugin.test_attach
def test_attach(self)
Definition: test_plugin.py:30
test_plugin.TestPlugin
Definition: test_plugin.py:15
boeing_gazebo_model_attachment_plugin.gazebo_client
Definition: gazebo_client.py:1


gazebo_model_attachment_plugin
Author(s): Boeing
autogenerated on Wed Jan 17 2024 03:32:15