Skip to content

Commit 17ef3db

Browse files
authored
Merge pull request #150 from RobotWebTools/fix-ros2-action-tests
Fix integration tests for actions on ROS2
2 parents 684491d + 9e53e69 commit 17ef3db

3 files changed

Lines changed: 27 additions & 27 deletions

File tree

docker/ros2/Dockerfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,13 @@ RUN apt-get update && apt-get install -y \
1010
# ros-${ROS_DISTRO}-ros-tutorials \
1111
ros-${ROS_DISTRO}-demo-nodes-py \
1212
ros-${ROS_DISTRO}-example-interfaces \
13+
ros-${ROS_DISTRO}-rmw-cyclonedds-cpp \
1314
--no-install-recommends \
1415
# Clear apt-cache to reduce image size
1516
&& rm -rf /var/lib/apt/lists/*
1617

18+
ENV RMW_IMPLEMENTATION=rmw_cyclonedds_cpp
19+
1720
# Copy launch and example action server
1821
COPY ./integration-tests-launch.py /
1922
COPY ./fibonacci_server.py /

docker/ros2/fibonacci_server.py

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -29,34 +29,35 @@ class MinimalActionServer(Node):
2929
"""Minimal action server that processes one goal at a time."""
3030

3131
def __init__(self):
32-
super().__init__('minimal_action_server')
32+
super().__init__("minimal_action_server")
3333
self._goal_handle = None
3434
self._goal_lock = threading.Lock()
3535
self._action_server = ActionServer(
3636
self,
3737
Fibonacci,
38-
'fibonacci',
38+
"fibonacci",
3939
execute_callback=self.execute_callback,
4040
goal_callback=self.goal_callback,
4141
handle_accepted_callback=self.handle_accepted_callback,
4242
cancel_callback=self.cancel_callback,
43-
callback_group=ReentrantCallbackGroup())
44-
self.get_logger().info('Starting fibonacci action server..')
43+
callback_group=ReentrantCallbackGroup(),
44+
)
45+
self.get_logger().info("Starting fibonacci action server..")
4546

4647
def destroy(self):
4748
self._action_server.destroy()
4849
super().destroy_node()
4950

5051
def goal_callback(self, goal_request):
5152
"""Accept or reject a client request to begin an action."""
52-
self.get_logger().info('Received goal request')
53+
self.get_logger().info("Received goal request")
5354
return GoalResponse.ACCEPT
5455

5556
def handle_accepted_callback(self, goal_handle):
5657
with self._goal_lock:
5758
# This server only allows one goal at a time
5859
if self._goal_handle is not None and self._goal_handle.is_active:
59-
self.get_logger().info('Aborting previous goal')
60+
self.get_logger().info("Aborting previous goal")
6061
# Abort the existing goal
6162
self._goal_handle.abort()
6263
self._goal_handle = goal_handle
@@ -65,34 +66,38 @@ def handle_accepted_callback(self, goal_handle):
6566

6667
def cancel_callback(self, goal):
6768
"""Accept or reject a client request to cancel an action."""
68-
self.get_logger().info('Received cancel request')
69+
self.get_logger().info("Received cancel request")
6970
return CancelResponse.ACCEPT
7071

7172
def execute_callback(self, goal_handle):
7273
"""Execute the goal."""
73-
self.get_logger().info('Executing goal...')
74+
self.get_logger().info("Executing goal...")
7475

7576
# Append the seeds for the Fibonacci sequence
77+
fib_sequence = [0, 1]
7678
feedback_msg = Fibonacci.Feedback()
77-
feedback_msg.sequence = [0, 1]
79+
feedback_msg.sequence = fib_sequence[:]
7880

7981
# Start executing the action
8082
for i in range(1, goal_handle.request.order):
8183
# If goal is flagged as no longer active (ie. another goal was accepted),
8284
# then stop executing
8385
if not goal_handle.is_active:
84-
self.get_logger().info('Goal aborted')
86+
self.get_logger().info("Goal aborted")
8587
return Fibonacci.Result()
8688

8789
if goal_handle.is_cancel_requested:
8890
goal_handle.canceled()
89-
self.get_logger().info('Goal canceled')
91+
self.get_logger().info("Goal canceled")
9092
return Fibonacci.Result()
9193

9294
# Update Fibonacci sequence
93-
feedback_msg.sequence.append(feedback_msg.sequence[i] + feedback_msg.sequence[i-1])
95+
fib_sequence.append(fib_sequence[i] + fib_sequence[i - 1])
96+
feedback_msg.sequence = fib_sequence[:]
9497

95-
self.get_logger().info('Publishing feedback: {0}'.format(feedback_msg.sequence))
98+
self.get_logger().info(
99+
"Publishing feedback: {0}".format(feedback_msg.sequence)
100+
)
96101

97102
# Publish the feedback
98103
goal_handle.publish_feedback(feedback_msg)
@@ -102,16 +107,16 @@ def execute_callback(self, goal_handle):
102107

103108
with self._goal_lock:
104109
if not goal_handle.is_active:
105-
self.get_logger().info('Goal aborted')
110+
self.get_logger().info("Goal aborted")
106111
return Fibonacci.Result()
107112

108113
goal_handle.succeed()
109114

110115
# Populate result message
111116
result = Fibonacci.Result()
112-
result.sequence = feedback_msg.sequence
117+
result.sequence = fib_sequence[:]
113118

114-
self.get_logger().info('Returning result: {0}'.format(result.sequence))
119+
self.get_logger().info("Returning result: {0}".format(result.sequence))
115120

116121
return result
117122

@@ -128,5 +133,5 @@ def main(args=None):
128133
pass
129134

130135

131-
if __name__ == '__main__':
136+
if __name__ == "__main__":
132137
main()

tests/ros2/test_actions.py

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,7 @@ def test_fibonacci():
99
ros = Ros("127.0.0.1", 9090)
1010
ros.run()
1111

12-
action = ActionClient(
13-
ros,
14-
'/fibonacci',
15-
'example_interfaces/action/Fibonacci'
16-
)
12+
action = ActionClient(ros, "/fibonacci", "example_interfaces/action/Fibonacci")
1713

1814
results = {}
1915

@@ -42,11 +38,7 @@ def test_cancel():
4238
ros = Ros("127.0.0.1", 9090)
4339
ros.run()
4440

45-
action = ActionClient(
46-
ros,
47-
'/fibonacci',
48-
'example_interfaces/action/Fibonacci'
49-
)
41+
action = ActionClient(ros, "/fibonacci", "example_interfaces/action/Fibonacci")
5042

5143
results = {}
5244

0 commit comments

Comments
 (0)