Skip to content

Commit ef16a43

Browse files
authored
Merge branch 'master' into jtc-feedback-time-from-start
2 parents 3785515 + cd23dba commit ef16a43

File tree

172 files changed

+7213
-984
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+7213
-984
lines changed

.pre-commit-config.yaml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ repos:
6464

6565
# CPP hooks
6666
- repo: https://github.com/pre-commit/mirrors-clang-format
67-
rev: v20.1.7
67+
rev: v20.1.8
6868
hooks:
6969
- id: clang-format
7070
args: ['-fallback-style=none', '-i']
@@ -113,7 +113,11 @@ repos:
113113
rev: v2.0.0
114114
hooks:
115115
- id: doc8
116-
args: ['--max-line-length=100', '--ignore=D001']
116+
args: [
117+
'--max-line-length=100',
118+
'--ignore=D001',
119+
'--ignore-path=motion_primitives_forward_controller/userdoc.rst' # D000 fails with myst_parser
120+
]
117121
exclude: CHANGELOG\.rst$
118122

119123
- repo: https://github.com/pre-commit/pygrep-hooks
@@ -134,7 +138,7 @@ repos:
134138
exclude: CHANGELOG\.rst|\.(svg|pyc|drawio)$
135139

136140
- repo: https://github.com/python-jsonschema/check-jsonschema
137-
rev: 0.33.1
141+
rev: 0.33.2
138142
hooks:
139143
- id: check-github-workflows
140144
args: ["--verbose"]

ackermann_steering_controller/CHANGELOG.rst

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,14 @@
22
Changelog for package ackermann_steering_controller
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5+
5.5.0 (2025-07-31)
6+
------------------
7+
8+
5.4.0 (2025-07-23)
9+
------------------
10+
* Use new handles API in ros2_controllers to fix deprecation warnings (`#1566 <https://github.com/ros-controls/ros2_controllers/issues/1566>`_)
11+
* Contributors: Sanjeev Kumar
12+
513
5.3.0 (2025-07-14)
614
------------------
715
* Update realtime containers (`#1721 <https://github.com/ros-controls/ros2_controllers/issues/1721>`_)

ackermann_steering_controller/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>ackermann_steering_controller</name>
5-
<version>5.3.0</version>
5+
<version>5.5.0</version>
66
<description>Steering controller for Ackermann kinematics. Rear fixed wheels are powering the vehicle and front wheels are steering it.</description>
77

88
<maintainer email="[email protected]">Bence Magyar</maintainer>

ackermann_steering_controller/src/ackermann_steering_controller.cpp

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,39 @@ controller_interface::CallbackReturn AckermannSteeringController::configure_odom
5555

5656
bool AckermannSteeringController::update_odometry(const rclcpp::Duration & period)
5757
{
58+
auto logger = get_node()->get_logger();
59+
5860
if (params_.open_loop)
5961
{
6062
odometry_.update_open_loop(last_linear_velocity_, last_angular_velocity_, period.seconds());
6163
}
6264
else
6365
{
64-
const double traction_right_wheel_value =
65-
state_interfaces_[STATE_TRACTION_RIGHT_WHEEL].get_value();
66-
const double traction_left_wheel_value =
67-
state_interfaces_[STATE_TRACTION_LEFT_WHEEL].get_value();
68-
const double steering_right_position = state_interfaces_[STATE_STEER_RIGHT_WHEEL].get_value();
69-
const double steering_left_position = state_interfaces_[STATE_STEER_LEFT_WHEEL].get_value();
66+
const auto traction_right_wheel_value_op =
67+
state_interfaces_[STATE_TRACTION_RIGHT_WHEEL].get_optional();
68+
const auto traction_left_wheel_value_op =
69+
state_interfaces_[STATE_TRACTION_LEFT_WHEEL].get_optional();
70+
const auto steering_right_position_op =
71+
state_interfaces_[STATE_STEER_RIGHT_WHEEL].get_optional();
72+
const auto steering_left_position_op = state_interfaces_[STATE_STEER_LEFT_WHEEL].get_optional();
73+
74+
if (
75+
!traction_right_wheel_value_op.has_value() || !traction_left_wheel_value_op.has_value() ||
76+
!steering_right_position_op.has_value() || !steering_left_position_op.has_value())
77+
{
78+
RCLCPP_DEBUG(
79+
logger,
80+
"Unable to retrieve the data from right wheel or left wheel or right steering position or "
81+
"left steering position!");
82+
83+
return true;
84+
}
85+
86+
const double traction_right_wheel_value = traction_right_wheel_value_op.value();
87+
const double traction_left_wheel_value = traction_left_wheel_value_op.value();
88+
const double steering_right_position = steering_right_position_op.value();
89+
const double steering_left_position = steering_left_position_op.value();
90+
7091
if (
7192
std::isfinite(traction_right_wheel_value) && std::isfinite(traction_left_wheel_value) &&
7293
std::isfinite(steering_right_position) && std::isfinite(steering_left_position))

ackermann_steering_controller/test/test_ackermann_steering_controller.cpp

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -140,9 +140,9 @@ TEST_F(AckermannSteeringControllerTest, reactivate_success)
140140
ASSERT_EQ(controller_->on_configure(rclcpp_lifecycle::State()), NODE_SUCCESS);
141141
ASSERT_EQ(controller_->on_activate(rclcpp_lifecycle::State()), NODE_SUCCESS);
142142
ASSERT_EQ(controller_->on_deactivate(rclcpp_lifecycle::State()), NODE_SUCCESS);
143-
ASSERT_TRUE(std::isnan(controller_->command_interfaces_[0].get_value()));
143+
ASSERT_TRUE(std::isnan(controller_->command_interfaces_[0].get_optional().value()));
144144
ASSERT_EQ(controller_->on_activate(rclcpp_lifecycle::State()), NODE_SUCCESS);
145-
ASSERT_TRUE(std::isnan(controller_->command_interfaces_[0].get_value()));
145+
ASSERT_TRUE(std::isnan(controller_->command_interfaces_[0].get_optional().value()));
146146

147147
ASSERT_EQ(
148148
controller_->update(rclcpp::Time(0, 0, RCL_ROS_TIME), rclcpp::Duration::from_seconds(0.01)),
@@ -173,17 +173,17 @@ TEST_F(AckermannSteeringControllerTest, test_update_logic)
173173

174174
// we test with open_loop=false, but steering angle was not updated (is zero) -> same commands
175175
EXPECT_NEAR(
176-
controller_->command_interfaces_[CMD_TRACTION_RIGHT_WHEEL].get_value(), 0.22222222222222224,
177-
COMMON_THRESHOLD);
176+
controller_->command_interfaces_[CMD_TRACTION_RIGHT_WHEEL].get_optional().value(),
177+
0.22222222222222224, COMMON_THRESHOLD);
178178
EXPECT_NEAR(
179-
controller_->command_interfaces_[CMD_TRACTION_LEFT_WHEEL].get_value(), 0.22222222222222224,
180-
COMMON_THRESHOLD);
179+
controller_->command_interfaces_[CMD_TRACTION_LEFT_WHEEL].get_optional().value(),
180+
0.22222222222222224, COMMON_THRESHOLD);
181181
EXPECT_NEAR(
182-
controller_->command_interfaces_[CMD_STEER_RIGHT_WHEEL].get_value(), 1.4179821977774734,
183-
COMMON_THRESHOLD);
182+
controller_->command_interfaces_[CMD_STEER_RIGHT_WHEEL].get_optional().value(),
183+
1.4179821977774734, COMMON_THRESHOLD);
184184
EXPECT_NEAR(
185-
controller_->command_interfaces_[CMD_STEER_LEFT_WHEEL].get_value(), 1.4179821977774734,
186-
COMMON_THRESHOLD);
185+
controller_->command_interfaces_[CMD_STEER_LEFT_WHEEL].get_optional().value(),
186+
1.4179821977774734, COMMON_THRESHOLD);
187187

188188
EXPECT_FALSE(std::isnan(controller_->input_ref_.get().twist.linear.x));
189189
EXPECT_EQ(controller_->reference_interfaces_.size(), joint_reference_interfaces_.size());
@@ -213,17 +213,17 @@ TEST_F(AckermannSteeringControllerTest, test_update_logic_chained)
213213

214214
// we test with open_loop=false, but steering angle was not updated (is zero) -> same commands
215215
EXPECT_NEAR(
216-
controller_->command_interfaces_[STATE_TRACTION_RIGHT_WHEEL].get_value(), 0.22222222222222224,
217-
COMMON_THRESHOLD);
216+
controller_->command_interfaces_[STATE_TRACTION_RIGHT_WHEEL].get_optional().value(),
217+
0.22222222222222224, COMMON_THRESHOLD);
218218
EXPECT_NEAR(
219-
controller_->command_interfaces_[STATE_TRACTION_LEFT_WHEEL].get_value(), 0.22222222222222224,
220-
COMMON_THRESHOLD);
219+
controller_->command_interfaces_[STATE_TRACTION_LEFT_WHEEL].get_optional().value(),
220+
0.22222222222222224, COMMON_THRESHOLD);
221221
EXPECT_NEAR(
222-
controller_->command_interfaces_[STATE_STEER_RIGHT_WHEEL].get_value(), 1.4179821977774734,
223-
COMMON_THRESHOLD);
222+
controller_->command_interfaces_[STATE_STEER_RIGHT_WHEEL].get_optional().value(),
223+
1.4179821977774734, COMMON_THRESHOLD);
224224
EXPECT_NEAR(
225-
controller_->command_interfaces_[STATE_STEER_LEFT_WHEEL].get_value(), 1.4179821977774734,
226-
COMMON_THRESHOLD);
225+
controller_->command_interfaces_[STATE_STEER_LEFT_WHEEL].get_optional().value(),
226+
1.4179821977774734, COMMON_THRESHOLD);
227227

228228
EXPECT_TRUE(std::isnan(controller_->input_ref_.get().twist.linear.x));
229229
EXPECT_EQ(controller_->reference_interfaces_.size(), joint_reference_interfaces_.size());
@@ -264,17 +264,17 @@ TEST_F(AckermannSteeringControllerTest, receive_message_and_publish_updated_stat
264264

265265
// we test with open_loop=false, but steering angle was not updated (is zero) -> same commands
266266
EXPECT_NEAR(
267-
controller_->command_interfaces_[CMD_TRACTION_RIGHT_WHEEL].get_value(), 0.22222222222222224,
268-
COMMON_THRESHOLD);
267+
controller_->command_interfaces_[CMD_TRACTION_RIGHT_WHEEL].get_optional().value(),
268+
0.22222222222222224, COMMON_THRESHOLD);
269269
EXPECT_NEAR(
270-
controller_->command_interfaces_[CMD_TRACTION_LEFT_WHEEL].get_value(), 0.22222222222222224,
271-
COMMON_THRESHOLD);
270+
controller_->command_interfaces_[CMD_TRACTION_LEFT_WHEEL].get_optional().value(),
271+
0.22222222222222224, COMMON_THRESHOLD);
272272
EXPECT_NEAR(
273-
controller_->command_interfaces_[CMD_STEER_RIGHT_WHEEL].get_value(), 1.4179821977774734,
274-
COMMON_THRESHOLD);
273+
controller_->command_interfaces_[CMD_STEER_RIGHT_WHEEL].get_optional().value(),
274+
1.4179821977774734, COMMON_THRESHOLD);
275275
EXPECT_NEAR(
276-
controller_->command_interfaces_[CMD_STEER_LEFT_WHEEL].get_value(), 1.4179821977774734,
277-
COMMON_THRESHOLD);
276+
controller_->command_interfaces_[CMD_STEER_LEFT_WHEEL].get_optional().value(),
277+
1.4179821977774734, COMMON_THRESHOLD);
278278

279279
subscribe_and_get_messages(msg);
280280

admittance_controller/CHANGELOG.rst

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,16 @@
22
Changelog for package admittance_controller
33
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
44

5+
5.5.0 (2025-07-31)
6+
------------------
7+
* Fix `child_frame_id` in controller_state_msg (`#1601 <https://github.com/ros-controls/ros2_controllers/issues/1601>`_)
8+
* Contributors: Rehan Shah
9+
10+
5.4.0 (2025-07-23)
11+
------------------
12+
* Use new handles API in ros2_controllers to fix deprecation warnings (`#1566 <https://github.com/ros-controls/ros2_controllers/issues/1566>`_)
13+
* Contributors: Sanjeev Kumar
14+
515
5.3.0 (2025-07-14)
616
------------------
717
* Use ParamListener::try_get_params to Avoid Blocking in Real-Time Contexts (`#1198 <https://github.com/ros-controls/ros2_controllers/issues/1198>`_)

admittance_controller/include/admittance_controller/admittance_controller.hpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,6 @@ class AdmittanceController : public controller_interface::ChainableControllerInt
8282
size_t num_joints_ = 0;
8383
std::vector<std::string> command_joint_names_;
8484

85-
// The interfaces are defined as the types in 'allowed_interface_types_' member.
86-
// For convenience, for each type the interfaces are ordered so that i-th position
87-
// matches i-th index in joint_names_
88-
template <typename T>
89-
using InterfaceReferences = std::vector<std::vector<std::reference_wrapper<T>>>;
90-
91-
InterfaceReferences<hardware_interface::LoanedCommandInterface> joint_command_interface_;
92-
InterfaceReferences<hardware_interface::LoanedStateInterface> joint_state_interface_;
93-
9485
bool has_position_state_interface_ = false;
9586
bool has_velocity_state_interface_ = false;
9687
bool has_acceleration_state_interface_ = false;

admittance_controller/include/admittance_controller/admittance_rule_impl.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,6 @@ controller_interface::return_type AdmittanceRule::reset(const size_t num_joints)
102102
state_message_.wrench_base.header.frame_id = parameters_.kinematics.base;
103103
state_message_.admittance_velocity.header.frame_id = parameters_.kinematics.base;
104104
state_message_.admittance_acceleration.header.frame_id = parameters_.kinematics.base;
105-
state_message_.admittance_position.header.frame_id = parameters_.kinematics.base;
106-
state_message_.admittance_position.child_frame_id = "admittance_offset";
107105

108106
// reset admittance state
109107
admittance_state_ = AdmittanceState(num_joints);
@@ -384,10 +382,12 @@ const control_msgs::msg::AdmittanceControllerState & AdmittanceRule::get_control
384382
admittance_state_.admittance_acceleration[5];
385383

386384
state_message_.admittance_position = tf2::eigenToTransform(admittance_state_.admittance_position);
385+
state_message_.admittance_position.header.frame_id = parameters_.kinematics.base;
386+
state_message_.admittance_position.child_frame_id = "admittance_offset";
387387

388-
state_message_.ref_trans_base_ft.header.frame_id = parameters_.kinematics.base;
389-
state_message_.ref_trans_base_ft.header.frame_id = "ft_reference";
390388
state_message_.ref_trans_base_ft = tf2::eigenToTransform(admittance_state_.ref_trans_base_ft);
389+
state_message_.ref_trans_base_ft.header.frame_id = parameters_.kinematics.base;
390+
state_message_.ref_trans_base_ft.child_frame_id = parameters_.ft_sensor.frame.id;
391391

392392
Eigen::Quaterniond quat(admittance_state_.rot_base_control);
393393
state_message_.rot_base_control.w = quat.w();

admittance_controller/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>admittance_controller</name>
5-
<version>5.3.0</version>
5+
<version>5.5.0</version>
66
<description>Implementation of admittance controllers for different input and output interface.</description>
77

88
<maintainer email="[email protected]">Bence Magyar</maintainer>

0 commit comments

Comments
 (0)