Skip to content

Commit b965673

Browse files
committed
Initial tests
1 parent 82328ca commit b965673

File tree

4 files changed

+104
-0
lines changed

4 files changed

+104
-0
lines changed

ur_controllers/CMakeLists.txt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,4 +131,23 @@ ament_export_libraries(
131131
${PROJECT_NAME}
132132
)
133133

134+
if(BUILD_TESTING)
135+
find_package(ament_cmake_gmock REQUIRED)
136+
find_package(controller_manager REQUIRED)
137+
find_package(hardware_interface REQUIRED)
138+
find_package(ros2_control_test_assets REQUIRED)
139+
140+
add_definitions(-DTEST_FILES_DIRECTORY="${CMAKE_CURRENT_SOURCE_DIR}/test")
141+
ament_add_gmock(test_load_freedrive_mode_controller
142+
test/test_load_freedrive_mode_controller.cpp
143+
)
144+
target_link_libraries(test_load_freedrive_mode_controller
145+
${PROJECT_NAME}
146+
)
147+
ament_target_dependencies(test_load_freedrive_mode_controller
148+
controller_manager
149+
ros2_control_test_assets
150+
)
151+
endif()
152+
134153
ament_package()
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
freedrive_mode_controller:
3+
ros__parameters:
4+
tf_prefix: ""
5+
inactive_timeout: 10
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Copyright 2024, Universal Robots A/S
2+
//
3+
// Redistribution and use in source and binary forms, with or without
4+
// modification, are permitted provided that the following conditions are met:
5+
//
6+
// * Redistributions of source code must retain the above copyright
7+
// notice, this list of conditions and the following disclaimer.
8+
//
9+
// * Redistributions in binary form must reproduce the above copyright
10+
// notice, this list of conditions and the following disclaimer in the
11+
// documentation and/or other materials provided with the distribution.
12+
//
13+
// * Neither the name of the {copyright_holder} nor the names of its
14+
// contributors may be used to endorse or promote products derived from
15+
// this software without specific prior written permission.
16+
//
17+
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18+
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19+
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20+
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21+
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22+
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23+
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24+
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25+
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26+
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27+
// POSSIBILITY OF SUCH DAMAGE.
28+
29+
#include <gmock/gmock.h>
30+
#include "controller_manager/controller_manager.hpp"
31+
#include "rclcpp/executor.hpp"
32+
#include "rclcpp/executors/single_threaded_executor.hpp"
33+
#include "rclcpp/utilities.hpp"
34+
#include "ros2_control_test_assets/descriptions.hpp"
35+
36+
TEST(TestLoadFreedriveModeController, load_controller)
37+
{
38+
std::shared_ptr<rclcpp::Executor> executor = std::make_shared<rclcpp::executors::SingleThreadedExecutor>();
39+
40+
controller_manager::ControllerManager cm{ executor, ros2_control_test_assets::minimal_robot_urdf, true,
41+
"test_controller_manager" };
42+
43+
const std::string test_file_path = std::string{ TEST_FILES_DIRECTORY } + "/freedrive_mode_controller_params.yaml";
44+
cm.set_parameter({ "test_freedrive_mode_controller.params_file", test_file_path });
45+
46+
cm.set_parameter({ "test_freedrive_mode_controller.type", "ur_controllers/FreedriveModeController" });
47+
48+
ASSERT_NE(cm.load_controller("test_freedrive_mode_controller"), nullptr);
49+
}
50+
51+
int main(int argc, char* argv[])
52+
{
53+
::testing::InitGoogleMock(&argc, argv);
54+
rclcpp::init(argc, argv);
55+
56+
int result = RUN_ALL_TESTS();
57+
rclcpp::shutdown();
58+
59+
return result;
60+
}

ur_robot_driver/test/integration_test_controller_switch.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ def test_activating_multiple_controllers_same_interface_fails(self):
9494
"forward_position_controller",
9595
"forward_velocity_controller",
9696
"passthrough_trajectory_controller",
97+
"freedrive_mode_controller",
9798
],
9899
).ok
99100
)
@@ -138,6 +139,7 @@ def test_activating_multiple_controllers_different_interface_fails(self):
138139
"forward_position_controller",
139140
"forward_velocity_controller",
140141
"passthrough_trajectory_controller",
142+
"freedrive_mode_controller",
141143
],
142144
).ok
143145
)
@@ -177,6 +179,15 @@ def test_activating_multiple_controllers_different_interface_fails(self):
177179
],
178180
).ok
179181
)
182+
self.assertFalse(
183+
self._controller_manager_interface.switch_controller(
184+
strictness=SwitchController.Request.STRICT,
185+
activate_controllers=[
186+
"scaled_joint_trajectory_controller",
187+
"freedrive_mode_controller",
188+
],
189+
).ok
190+
)
180191

181192
def test_activating_controller_with_running_position_controller_fails(self):
182193
# Having a position-based controller active, no other controller should be able to
@@ -191,6 +202,7 @@ def test_activating_controller_with_running_position_controller_fails(self):
191202
"joint_trajectory_controller",
192203
"forward_position_controller",
193204
"forward_velocity_controller",
205+
"freedrive_mode_controller",
194206
"passthrough_trajectory_controller",
195207
],
196208
).ok
@@ -211,6 +223,14 @@ def test_activating_controller_with_running_position_controller_fails(self):
211223
],
212224
).ok
213225
)
226+
self.assertFalse(
227+
self._controller_manager_interface.switch_controller(
228+
strictness=SwitchController.Request.STRICT,
229+
activate_controllers=[
230+
"freedrive_mode_controller",
231+
],
232+
).ok
233+
)
214234
self.assertFalse(
215235
self._controller_manager_interface.switch_controller(
216236
strictness=SwitchController.Request.STRICT,

0 commit comments

Comments
 (0)