Skip to content

Commit 2c609d0

Browse files
committed
feat: state_broadcaster implementation
1 parent 26b743d commit 2c609d0

14 files changed

Lines changed: 1288 additions & 662 deletions

CMakeLists.txt

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ find_package(Eigen3 REQUIRED)
6161
find_package(pinocchio REQUIRED)
6262
find_package(realtime_tools REQUIRED)
6363
find_package(std_msgs REQUIRED)
64+
find_package(geometry_msgs REQUIRED)
65+
find_package(sensor_msgs REQUIRED)
6466
find_package(generate_parameter_library REQUIRED)
6567

6668
generate_parameter_library(
@@ -69,20 +71,15 @@ generate_parameter_library(
6971
)
7072

7173
generate_parameter_library(
72-
pose_broadcaster_parameters
73-
src/pose_broadcaster.yaml
74+
state_broadcaster_parameters
75+
src/state_broadcaster.yaml
7476
)
7577

7678
generate_parameter_library(
7779
torque_feedback_controller_parameters
7880
src/torque_feedback_controller.yaml
7981
)
8082

81-
generate_parameter_library(
82-
twist_broadcaster_parameters
83-
src/twist_broadcaster.yaml
84-
)
85-
8683
generate_parameter_library(
8784
cartesian_admittance_controller_parameters
8885
src/cartesian_admittance_controller.yaml
@@ -93,9 +90,8 @@ add_library(
9390
SHARED
9491
src/cartesian_controller.cpp
9592
src/cartesian_admittance_controller.cpp
96-
src/pose_broadcaster.cpp
93+
src/state_broadcaster.cpp
9794
src/torque_feedback_controller.cpp
98-
src/twist_broadcaster.cpp
9995
)
10096

10197
target_link_libraries(${PROJECT_NAME}
@@ -121,9 +117,8 @@ target_link_libraries(${PROJECT_NAME}
121117
PRIVATE
122118
cartesian_controller_parameters
123119
cartesian_admittance_controller_parameters
124-
pose_broadcaster_parameters
120+
state_broadcaster_parameters
125121
torque_feedback_controller_parameters
126-
twist_broadcaster_parameters
127122
)
128123

129124

@@ -138,6 +133,8 @@ ament_target_dependencies(${PROJECT_NAME}
138133
generate_parameter_library
139134
realtime_tools
140135
std_msgs
136+
geometry_msgs
137+
sensor_msgs
141138
)
142139

143140
pluginlib_export_plugin_description_file(
@@ -166,6 +163,8 @@ ament_export_dependencies(
166163
pinocchio
167164
realtime_tools
168165
std_msgs
166+
geometry_msgs
167+
sensor_msgs
169168
generate_parameter_library
170169
)
171170

crisp_controllers.xml

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111
Cartesian admittance controller with impedance outer loop for compliant force-based interaction.
1212
</description>
1313
</class>
14-
<class name="crisp_controllers/PoseBroadcaster"
15-
type="crisp_controllers::PoseBroadcaster" base_class_type="controller_interface::ControllerInterface">
14+
<class name="crisp_controllers/StateBroadcaster"
15+
type="crisp_controllers::StateBroadcaster" base_class_type="controller_interface::ControllerInterface">
1616
<description>
17-
Simple broadcaster for the pose.
17+
Broadcaster for joint, Cartesian pose, twist, and wrench state outputs.
1818
</description>
1919
</class>
2020
<class name="crisp_controllers/TorqueFeedbackController"
@@ -23,10 +23,4 @@
2323
Torque feedback controller for robotic manipulators that responds to external torques with PD control and friction compensation.
2424
</description>
2525
</class>
26-
<class name="crisp_controllers/TwistBroadcaster"
27-
type="crisp_controllers::TwistBroadcaster" base_class_type="controller_interface::ControllerInterface">
28-
<description>
29-
Simple broadcaster for the twist velocity.
30-
</description>
31-
</class>
3226
</library>

include/crisp_controllers/cartesian_controller.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <pinocchio/algorithm/kinematics.hpp>
1919
#include <pinocchio/multibody/fwd.hpp>
2020
#include <rclcpp/rclcpp.hpp>
21+
#include <realtime_tools/realtime_publisher.hpp>
2122

2223
#include <crisp_controllers/utils/ros2_version.hpp>
2324

@@ -106,6 +107,14 @@ class CartesianController : public controller_interface::ControllerInterface {
106107
/** @brief Subscription for variable stiffness messages */
107108
rclcpp::Subscription<std_msgs::msg::Float64MultiArray>::SharedPtr stiffness_sub_;
108109

110+
/** @brief Publisher for commanded joint effort values */
111+
rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr effort_publisher_;
112+
/** @brief Realtime publisher for commanded joint effort values */
113+
std::shared_ptr<realtime_tools::RealtimePublisher<std_msgs::msg::Float64MultiArray>>
114+
realtime_effort_publisher_;
115+
/** @brief Pre-sized commanded effort message for realtime publication */
116+
std_msgs::msg::Float64MultiArray effort_msg_;
117+
109118
/** @brief Flag to indicate if multiple publishers detected */
110119
bool multiple_publishers_detected_;
111120

@@ -274,6 +283,11 @@ class CartesianController : public controller_interface::ControllerInterface {
274283
/** @brief Final desired torque command */
275284
Eigen::VectorXd tau_d;
276285

286+
/** @brief Time accumulated since the last effort publication */
287+
rclcpp::Duration publish_elapsed_{0, 0};
288+
/** @brief Effort publication interval */
289+
rclcpp::Duration publish_interval_{0, 0};
290+
277291
/** @brief Inverse of the manipulator joint mass projected in Cartesian space (6x6) */
278292
Eigen::Matrix<double, 6, 6> Mx_inv = Eigen::Matrix<double, 6, 6>::Zero();
279293
/** @brief the manipulator joint mass projected in Cartesian space (6x6) */

include/crisp_controllers/pose_broadcaster.hpp

Lines changed: 0 additions & 77 deletions
This file was deleted.

0 commit comments

Comments
 (0)