Skip to content

Commit c010905

Browse files
authored
Merge pull request #332 from lbr-stack/backport-331-to-jazzy
Backport 331 to jazzy
2 parents 808bb07 + ad3b17d commit c010905

File tree

20 files changed

+43
-88
lines changed

20 files changed

+43
-88
lines changed

CHANGELOG.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22
Changelog for package LBR FRI ROS 2 Stack
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
4+
Jazzy v2.4.1 (2025-12-08)
5+
--------------------------
6+
* ``lbr_bringup``: Run a single ``controller_manager`` ``spawner`` for all controllers: https://github.com/lbr-stack/lbr_fri_ros2_stack/issues/329
7+
48
Jazzy v2.4.0 (2025-12-06)
59
--------------------------
610
This release removes the asynchronous force-torque estimation from the system interface (introduced in https://github.com/lbr-stack/lbr_fri_ros2_stack/releases/tag/humble-v2.2.0)

CITATION.cff

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ authors:
1919

2020

2121
title: "LBR-Stack: ROS 2 and Python Integration of KUKA FRI for Med and IIWA Robots"
22-
version: 2.4.0
22+
version: 2.4.1
2323
doi: 10.21105/joss.06138
24-
date-released: 2025-12-06
24+
date-released: 2025-12-08

lbr_bringup/launch/gazebo.launch.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,10 @@ def generate_launch_description() -> LaunchDescription:
3434
GazeboMixin.node_create()
3535
) # spawns robot in Gazebo through robot_description topic of robot_state_publisher
3636

37-
# controllers
38-
joint_state_broadcaster = LBRROS2ControlMixin.node_controller_spawner(
39-
controller="joint_state_broadcaster"
40-
)
41-
ld.add_action(joint_state_broadcaster)
37+
# spawn controllers
4238
ld.add_action(
4339
LBRROS2ControlMixin.node_controller_spawner(
44-
controller=LaunchConfiguration("ctrl")
40+
controllers=["joint_state_broadcaster", LaunchConfiguration("ctrl")]
4541
)
4642
)
4743
return ld
Lines changed: 10 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from launch import LaunchDescription
2-
from launch.actions import RegisterEventHandler
3-
from launch.event_handlers import OnExecutionComplete, OnProcessStart
42
from launch.substitutions import LaunchConfiguration
53
from lbr_bringup.description import LBRDescriptionMixin
64
from lbr_bringup.ros2_control import LBRROS2ControlMixin
@@ -31,45 +29,16 @@ def generate_launch_description() -> LaunchDescription:
3129
ros2_control_node = LBRROS2ControlMixin.node_ros2_control(use_sim_time=False)
3230
ld.add_action(ros2_control_node)
3331

34-
# controllers on ros2 control node start
35-
joint_state_broadcaster = LBRROS2ControlMixin.node_controller_spawner(
36-
controller="joint_state_broadcaster"
37-
)
38-
estimated_wrench_interface = LBRROS2ControlMixin.node_controller_spawner(
39-
controller="estimated_wrench_interface"
40-
)
41-
lbr_state_broadcaster = LBRROS2ControlMixin.node_controller_spawner(
42-
controller="lbr_state_broadcaster"
43-
)
44-
45-
preceding_controllers_event_handler = RegisterEventHandler(
46-
OnProcessStart(
47-
target_action=ros2_control_node,
48-
on_start=[
49-
joint_state_broadcaster,
50-
estimated_wrench_interface,
51-
lbr_state_broadcaster,
52-
],
53-
)
54-
)
55-
ld.add_action(preceding_controllers_event_handler)
56-
57-
# controllers on estimated wrench interface
58-
force_torque_broadcaster = LBRROS2ControlMixin.node_controller_spawner(
59-
controller="force_torque_broadcaster"
60-
)
61-
controller = LBRROS2ControlMixin.node_controller_spawner(
62-
controller=LaunchConfiguration("ctrl")
63-
)
64-
65-
controller_event_handler = RegisterEventHandler(
66-
OnExecutionComplete(
67-
target_action=estimated_wrench_interface, # estimated wrench interface is chained and exposes external wrench estimate state interfaces
68-
on_completion=[
69-
force_torque_broadcaster,
70-
controller,
71-
],
32+
# spawn controllers
33+
ld.add_action(
34+
LBRROS2ControlMixin.node_controller_spawner(
35+
controllers=[
36+
"joint_state_broadcaster",
37+
"estimated_wrench_interface",
38+
"lbr_state_broadcaster",
39+
"force_torque_broadcaster",
40+
LaunchConfiguration("ctrl"),
41+
]
7242
)
7343
)
74-
ld.add_action(controller_event_handler)
7544
return ld

lbr_bringup/launch/mock.launch.py

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
11
from launch import LaunchDescription
2-
from launch.actions import RegisterEventHandler
3-
from launch.event_handlers import OnProcessStart
42
from launch.substitutions import LaunchConfiguration
53
from lbr_bringup.description import LBRDescriptionMixin
64
from lbr_bringup.ros2_control import LBRROS2ControlMixin
@@ -30,22 +28,10 @@ def generate_launch_description() -> LaunchDescription:
3028
ros2_control_node = LBRROS2ControlMixin.node_ros2_control(use_sim_time=False)
3129
ld.add_action(ros2_control_node)
3230

33-
# joint state broad caster and controller on ros2 control node start
34-
joint_state_broadcaster = LBRROS2ControlMixin.node_controller_spawner(
35-
controller="joint_state_broadcaster"
36-
)
37-
controller = LBRROS2ControlMixin.node_controller_spawner(
38-
controller=LaunchConfiguration("ctrl")
39-
)
40-
41-
controller_event_handler = RegisterEventHandler(
42-
OnProcessStart(
43-
target_action=ros2_control_node,
44-
on_start=[
45-
joint_state_broadcaster,
46-
controller,
47-
],
31+
# spawn controllers
32+
ld.add_action(
33+
LBRROS2ControlMixin.node_controller_spawner(
34+
controllers=["joint_state_broadcaster", LaunchConfiguration("ctrl")]
4835
)
4936
)
50-
ld.add_action(controller_event_handler)
5137
return ld

lbr_bringup/lbr_bringup/ros2_control.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from typing import Dict, Optional, Union
1+
from typing import Dict, List, Optional, Union
22

33
from launch.actions import DeclareLaunchArgument
44
from launch.substitutions import LaunchConfiguration, PathJoinSubstitution
@@ -31,8 +31,8 @@ def arg_ctrl() -> DeclareLaunchArgument:
3131
description="Desired default controller. One of specified in ctrl_cfg.",
3232
choices=[
3333
"admittance_controller",
34-
"joint_trajectory_controller",
3534
"forward_position_controller",
35+
"joint_trajectory_controller",
3636
"lbr_joint_position_command_controller",
3737
"lbr_torque_command_controller",
3838
"lbr_wrench_command_controller",
@@ -112,20 +112,20 @@ def node_controller_spawner(
112112
robot_name: Optional[Union[LaunchConfiguration, str]] = LaunchConfiguration(
113113
"robot_name", default="lbr"
114114
),
115-
controller: Optional[Union[LaunchConfiguration, str]] = LaunchConfiguration(
116-
"ctrl"
117-
),
115+
controllers: Optional[List[Union[LaunchConfiguration, str]]] = [
116+
LaunchConfiguration("ctrl")
117+
],
118118
**kwargs,
119119
) -> Node:
120120
return Node(
121121
package="controller_manager",
122122
executable="spawner",
123123
output="screen",
124124
arguments=[
125-
controller,
126125
"--controller-manager",
127126
"controller_manager",
128-
],
127+
]
128+
+ controllers,
129129
namespace=robot_name,
130130
**kwargs,
131131
)

lbr_bringup/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>lbr_bringup</name>
5-
<version>2.4.0</version>
5+
<version>2.4.1</version>
66
<description>LBR launch files.</description>
77
<maintainer email="m.huber_1994@hotmail.de">mhubii</maintainer>
88
<license>Apache-2.0</license>

lbr_demos/lbr_demos_advanced_cpp/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>lbr_demos_advanced_cpp</name>
5-
<version>2.4.0</version>
5+
<version>2.4.1</version>
66
<description>Advanced C++ demos for the lbr_ros2_control.</description>
77
<maintainer email="m.huber_1994@hotmail.de">mhubii</maintainer>
88
<license>Apache-2.0</license>

lbr_demos/lbr_demos_advanced_py/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
33
<package format="3">
44
<name>lbr_demos_advanced_py</name>
5-
<version>2.4.0</version>
5+
<version>2.4.1</version>
66
<description>Advanced Python demos for the lbr_ros2_control.</description>
77
<maintainer email="m.huber_1994@hotmail.de">mhubii</maintainer>
88
<maintainer email="mower.chris@gmail.com">cmower</maintainer>

lbr_demos/lbr_demos_advanced_py/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
setup(
88
name=package_name,
9-
version="2.4.0",
9+
version="2.4.1",
1010
packages=[package_name],
1111
data_files=[
1212
("share/ament_index/resource_index/packages", ["resource/" + package_name]),

0 commit comments

Comments
 (0)