Skip to content

Commit e7f08db

Browse files
Controller spawner timeout (backport #608) (#609)
* Simplify controller spawner definitions * Ignore flake8 W503 as it clashes with black and goes againts PEP8 style * Add argument to set controller spawner timeout * Use longer controller manager timeout in CI The default timeout of 10s is the same as our RTDE retry timeout, which means if RTDE does not immediately connect (which happens regularly in CI runners) controller spawning would fail. (cherry picked from commit 5e9d442) Co-authored-by: RobertWilbrandt <[email protected]>
1 parent af2ff1b commit e7f08db

File tree

3 files changed

+54
-47
lines changed

3 files changed

+54
-47
lines changed

.pre-commit-config.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ repos:
5454
rev: 3.9.0
5555
hooks:
5656
- id: flake8
57-
args: ["--ignore=E501"]
57+
args: ["--ignore=E501,W503"]
5858

5959
# CPP hooks
6060
# The same options as in ament_cppcheck are used, but its not working...

ur_robot_driver/launch/ur_control.launch.py

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,13 @@
2929
#
3030
# Author: Denis Stogl
3131

32+
from launch_ros.actions import Node
33+
from launch_ros.substitutions import FindPackageShare
34+
3235
from launch import LaunchDescription
33-
from launch.actions import DeclareLaunchArgument
34-
from launch.actions import OpaqueFunction
36+
from launch.actions import DeclareLaunchArgument, OpaqueFunction
3537
from launch.conditions import IfCondition, UnlessCondition
3638
from launch.substitutions import Command, FindExecutable, LaunchConfiguration, PathJoinSubstitution
37-
from launch_ros.actions import Node
38-
from launch_ros.substitutions import FindPackageShare
3939

4040

4141
def launch_setup(context, *args, **kwargs):
@@ -54,6 +54,7 @@ def launch_setup(context, *args, **kwargs):
5454
prefix = LaunchConfiguration("prefix")
5555
use_fake_hardware = LaunchConfiguration("use_fake_hardware")
5656
fake_sensor_commands = LaunchConfiguration("fake_sensor_commands")
57+
controller_spawner_timeout = LaunchConfiguration("controller_spawner_timeout")
5758
initial_joint_controller = LaunchConfiguration("initial_joint_controller")
5859
activate_joint_controller = LaunchConfiguration("activate_joint_controller")
5960
launch_rviz = LaunchConfiguration("launch_rviz")
@@ -271,55 +272,58 @@ def launch_setup(context, *args, **kwargs):
271272
arguments=["-d", rviz_config_file],
272273
)
273274

274-
joint_state_broadcaster_spawner = Node(
275-
package="controller_manager",
276-
executable="spawner",
277-
arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"],
278-
)
275+
# Spawn controllers
276+
def controller_spawner(name, active=True):
277+
inactive_flags = ["--inactive"] if not active else []
278+
return Node(
279+
package="controller_manager",
280+
executable="spawner",
281+
arguments=[
282+
name,
283+
"--controller-manager",
284+
"/controller_manager",
285+
"--controller-manager-timeout",
286+
controller_spawner_timeout,
287+
]
288+
+ inactive_flags,
289+
)
279290

280-
io_and_status_controller_spawner = Node(
281-
package="controller_manager",
282-
executable="spawner",
283-
arguments=["io_and_status_controller", "-c", "/controller_manager"],
284-
)
291+
controller_spawner_names = [
292+
"joint_state_broadcaster",
293+
"io_and_status_controller",
294+
"speed_scaling_state_broadcaster",
295+
"force_torque_sensor_broadcaster",
296+
]
297+
controller_spawner_inactive_names = ["forward_position_controller"]
285298

286-
speed_scaling_state_broadcaster_spawner = Node(
287-
package="controller_manager",
288-
executable="spawner",
289-
arguments=[
290-
"speed_scaling_state_broadcaster",
291-
"--controller-manager",
292-
"/controller_manager",
293-
],
294-
)
299+
controller_spawners = [controller_spawner(name) for name in controller_spawner_names] + [
300+
controller_spawner(name, active=False) for name in controller_spawner_inactive_names
301+
]
295302

296-
force_torque_sensor_broadcaster_spawner = Node(
303+
# There may be other controllers of the joints, but this is the initially-started one
304+
initial_joint_controller_spawner_started = Node(
297305
package="controller_manager",
298306
executable="spawner",
299307
arguments=[
300-
"force_torque_sensor_broadcaster",
301-
"--controller-manager",
308+
initial_joint_controller,
309+
"-c",
302310
"/controller_manager",
311+
"--controller-manager-timeout",
312+
controller_spawner_timeout,
303313
],
304-
)
305-
306-
forward_position_controller_spawner_stopped = Node(
307-
package="controller_manager",
308-
executable="spawner",
309-
arguments=["forward_position_controller", "-c", "/controller_manager", "--inactive"],
310-
)
311-
312-
# There may be other controllers of the joints, but this is the initially-started one
313-
initial_joint_controller_spawner_started = Node(
314-
package="controller_manager",
315-
executable="spawner",
316-
arguments=[initial_joint_controller, "-c", "/controller_manager"],
317314
condition=IfCondition(activate_joint_controller),
318315
)
319316
initial_joint_controller_spawner_stopped = Node(
320317
package="controller_manager",
321318
executable="spawner",
322-
arguments=[initial_joint_controller, "-c", "/controller_manager", "--inactive"],
319+
arguments=[
320+
initial_joint_controller,
321+
"-c",
322+
"/controller_manager",
323+
"--controller-manager-timeout",
324+
controller_spawner_timeout,
325+
"--inactive",
326+
],
323327
condition=UnlessCondition(activate_joint_controller),
324328
)
325329

@@ -331,14 +335,9 @@ def launch_setup(context, *args, **kwargs):
331335
controller_stopper_node,
332336
robot_state_publisher_node,
333337
rviz_node,
334-
joint_state_broadcaster_spawner,
335-
io_and_status_controller_spawner,
336-
speed_scaling_state_broadcaster_spawner,
337-
force_torque_sensor_broadcaster_spawner,
338-
forward_position_controller_spawner_stopped,
339338
initial_joint_controller_spawner_stopped,
340339
initial_joint_controller_spawner_started,
341-
]
340+
] + controller_spawners
342341

343342
return nodes_to_start
344343

@@ -441,6 +440,13 @@ def generate_launch_description():
441440
description="Enable headless mode for robot control",
442441
)
443442
)
443+
declared_arguments.append(
444+
DeclareLaunchArgument(
445+
"controller_spawner_timeout",
446+
default_value="10",
447+
description="Timeout used when spawning controllers.",
448+
)
449+
)
444450
declared_arguments.append(
445451
DeclareLaunchArgument(
446452
"initial_joint_controller",

ur_robot_driver/test/robot_driver.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ def generate_test_description():
9494
"robot_ip": "192.168.56.101",
9595
"ur_type": ur_type,
9696
"launch_rviz": "false",
97+
"controller_spawner_timeout": str(TIMEOUT_WAIT_SERVICE_INITIAL),
9798
"initial_joint_controller": "scaled_joint_trajectory_controller",
9899
"headless_mode": "true",
99100
"launch_dashboard_client": "false",

0 commit comments

Comments
 (0)