Skip to content

Commit 71b6efb

Browse files
Let PID controller parse command joint names instead of joints
1 parent ce28eb3 commit 71b6efb

File tree

5 files changed

+38
-17
lines changed

5 files changed

+38
-17
lines changed

joint_trajectory_controller/src/joint_trajectory_controller.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -738,7 +738,7 @@ controller_interface::CallbackReturn JointTrajectoryController::on_configure(
738738
params_.controller_plugin.c_str(), ex.what());
739739
return CallbackReturn::FAILURE;
740740
}
741-
if (traj_contr_->initialize(get_node()) == false)
741+
if (traj_contr_->initialize(get_node(), command_joint_names_) == false)
742742
{
743743
RCLCPP_FATAL(
744744
logger,

joint_trajectory_controller_plugins/include/joint_trajectory_controller_plugins/pid_trajectory_plugin.hpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#define JOINT_TRAJECTORY_CONTROLLER_PLUGINS__PID_TRAJECTORY_PLUGIN_HPP_
1717

1818
#include <memory>
19+
#include <string>
1920
#include <vector>
2021

2122
#include "control_toolbox/pid.hpp"
@@ -32,7 +33,9 @@ namespace joint_trajectory_controller_plugins
3233
class PidTrajectoryPlugin : public TrajectoryControllerBase
3334
{
3435
public:
35-
bool initialize(rclcpp_lifecycle::LifecycleNode::SharedPtr node) override;
36+
bool initialize(
37+
rclcpp_lifecycle::LifecycleNode::SharedPtr node,
38+
std::vector<std::string> command_joint_names) override;
3639

3740
bool computeGains(const trajectory_msgs::msg::JointTrajectory trajectory) override;
3841

@@ -45,8 +48,10 @@ class PidTrajectoryPlugin : public TrajectoryControllerBase
4548
void reset() override;
4649

4750
protected:
48-
// degree of freedom
49-
size_t dof_;
51+
// number of command joints
52+
size_t num_cmd_joints_;
53+
// name of the command joints
54+
std::vector<std::string> command_joint_names_;
5055
// PID controllers
5156
std::vector<PidPtr> pids_;
5257
// Feed-forward velocity weight factor when calculating closed loop pid adapter's command

joint_trajectory_controller_plugins/include/joint_trajectory_controller_plugins/trajectory_controller_base.hpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#ifndef JOINT_TRAJECTORY_CONTROLLER_PLUGINS__TRAJECTORY_CONTROLLER_BASE_HPP_
1616
#define JOINT_TRAJECTORY_CONTROLLER_PLUGINS__TRAJECTORY_CONTROLLER_BASE_HPP_
1717

18+
#include <string>
1819
#include <vector>
1920

2021
#include "rclcpp/rclcpp.hpp"
@@ -39,7 +40,9 @@ class TrajectoryControllerBase
3940
/**
4041
*/
4142
JOINT_TRAJECTORY_CONTROLLER_PLUGINS_PUBLIC
42-
virtual bool initialize(rclcpp_lifecycle::LifecycleNode::SharedPtr node) = 0;
43+
virtual bool initialize(
44+
rclcpp_lifecycle::LifecycleNode::SharedPtr node,
45+
std::vector<std::string> command_joint_names) = 0;
4346

4447
/**
4548
*/

joint_trajectory_controller_plugins/src/pid_trajectory_plugin.cpp

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,36 @@
1717
namespace joint_trajectory_controller_plugins
1818
{
1919

20-
bool PidTrajectoryPlugin::initialize(rclcpp_lifecycle::LifecycleNode::SharedPtr node)
20+
bool PidTrajectoryPlugin::initialize(
21+
rclcpp_lifecycle::LifecycleNode::SharedPtr node, std::vector<std::string> command_joint_names)
2122
{
2223
node_ = node;
24+
command_joint_names_ = command_joint_names;
2325

2426
try
2527
{
2628
// Create the parameter listener and get the parameters
2729
param_listener_ = std::make_shared<ParamListener>(node_);
2830
params_ = param_listener_->get_params();
29-
dof_ = params_.joints.size();
3031
}
3132
catch (const std::exception & e)
3233
{
3334
fprintf(stderr, "Exception thrown during init stage with message: %s \n", e.what());
3435
return false;
3536
}
36-
RCLCPP_INFO(node_->get_logger(), "[PidTrajectoryPlugin] Initialized with %lu joints.", dof_);
37+
38+
// parse read-only params
39+
num_cmd_joints_ = command_joint_names_.size();
40+
if (num_cmd_joints_ == 0)
41+
{
42+
RCLCPP_ERROR(node_->get_logger(), "[PidTrajectoryPlugin] No command joints specified.");
43+
return false;
44+
}
45+
pids_.resize(num_cmd_joints_);
46+
ff_velocity_scale_.resize(num_cmd_joints_);
47+
48+
RCLCPP_INFO(
49+
node_->get_logger(), "[PidTrajectoryPlugin] Initialized with %lu joints.", num_cmd_joints_);
3750
return true;
3851
}
3952

@@ -45,13 +58,13 @@ bool PidTrajectoryPlugin::computeGains(const trajectory_msgs::msg::JointTrajecto
4558
RCLCPP_DEBUG(node_->get_logger(), "[PidTrajectoryPlugin] Updated parameters");
4659
}
4760

48-
pids_.resize(dof_);
49-
ff_velocity_scale_.resize(dof_);
61+
pids_.resize(num_cmd_joints_);
62+
ff_velocity_scale_.resize(num_cmd_joints_);
5063

5164
// Init PID gains from ROS parameters
52-
for (size_t i = 0; i < dof_; ++i)
65+
for (size_t i = 0; i < num_cmd_joints_; ++i)
5366
{
54-
const auto & gains = params_.gains.joints_map.at(params_.joints[i]);
67+
const auto & gains = params_.gains.joints_map.at(command_joint_names_[i]);
5568
pids_[i] = std::make_shared<control_toolbox::Pid>(
5669
gains.p, gains.i, gains.d, gains.i_clamp, -gains.i_clamp);
5770

@@ -60,7 +73,7 @@ bool PidTrajectoryPlugin::computeGains(const trajectory_msgs::msg::JointTrajecto
6073

6174
RCLCPP_INFO(
6275
node_->get_logger(),
63-
"[PidTrajectoryPlugin] Loaded PID gains from ROS parameters for %lu joints.", dof_);
76+
"[PidTrajectoryPlugin] Loaded PID gains from ROS parameters for %lu joints.", num_cmd_joints_);
6477
return true;
6578
}
6679

@@ -71,7 +84,7 @@ void PidTrajectoryPlugin::computeCommands(
7184
const rclcpp::Duration & period)
7285
{
7386
// Update PIDs
74-
for (auto i = 0ul; i < dof_; ++i)
87+
for (auto i = 0ul; i < num_cmd_joints_; ++i)
7588
{
7689
tmp_command[i] = (desired.velocities[i] * ff_velocity_scale_[i]) +
7790
pids_[i]->computeCommand(

joint_trajectory_controller_plugins/test/test_pid_trajectory.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ TEST_F(PidTrajectoryTest, TestEmptySetup)
1919
std::shared_ptr<TestableJointTrajectoryControllerPlugin> traj_contr =
2020
std::make_shared<TestableJointTrajectoryControllerPlugin>();
2121

22-
ASSERT_FALSE(traj_contr->initialize(node_));
22+
ASSERT_FALSE(traj_contr->initialize(node_, std::vector<std::string>()));
2323
}
2424

2525
TEST_F(PidTrajectoryTest, TestSingleJoint)
@@ -33,7 +33,7 @@ TEST_F(PidTrajectoryTest, TestSingleJoint)
3333
// override read_only parameter
3434
node_->declare_parameter("joints", joint_names_paramv);
3535

36-
ASSERT_TRUE(traj_contr->initialize(node_));
36+
ASSERT_TRUE(traj_contr->initialize(node_, joint_names));
3737

3838
// set dynamic parameters
3939
traj_contr->trigger_declare_parameters();
@@ -63,7 +63,7 @@ TEST_F(PidTrajectoryTest, TestMultipleJoints)
6363
// override read_only parameter
6464
node_->declare_parameter("joints", joint_names_paramv);
6565

66-
ASSERT_TRUE(traj_contr->initialize(node_));
66+
ASSERT_TRUE(traj_contr->initialize(node_, joint_names));
6767

6868
// set dynamic parameters
6969
traj_contr->trigger_declare_parameters();

0 commit comments

Comments
 (0)