Skip to content

Commit a1a4789

Browse files
committed
Merge branches 'joint_pos_vel_startup_bugfix_melodic', 'pid_integrator_state_melodic' and 'pos_controller_no_redundant_init_melodic' into improve_joint_calibration_controller
4 parents 8cf343c + dc586dc + fe9086e + 5548003 commit a1a4789

File tree

5 files changed

+14
-12
lines changed

5 files changed

+14
-12
lines changed

pr2_controllers_msgs/msg/JointControllerState.msg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ float64 set_point
33
float64 process_value
44
float64 process_value_dot
55
float64 error
6+
float64 i_error
67
float64 time_step
78
float64 command
89
float64 p

robot_mechanism_controllers/include/robot_mechanism_controllers/joint_position_controller.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ class JointPositionController : public pr2_controller_interface::Controller
9696
virtual void starting() {
9797
command_ = joint_state_->position_;
9898
pid_controller_.reset();
99+
last_time_ = robot_->getTime();
99100
}
100101

101102
/*!
@@ -113,7 +114,6 @@ class JointPositionController : public pr2_controller_interface::Controller
113114

114115
private:
115116
int loop_count_;
116-
bool initialized_;
117117
pr2_mechanism_model::RobotState *robot_; /**< Pointer to robot structure. */
118118
control_toolbox::Pid pid_controller_; /**< Internal PID controller. */
119119
ros::Time last_time_; /**< Last time stamp of update. */

robot_mechanism_controllers/include/robot_mechanism_controllers/joint_velocity_controller.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ class JointVelocityController : public pr2_controller_interface::Controller
105105
virtual void starting() {
106106
command_ = 0.0;
107107
pid_controller_.reset();
108+
last_time_ = robot_->getTime();
108109
}
109110
virtual void update();
110111

robot_mechanism_controllers/src/joint_position_controller.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ namespace controller {
4444

4545
JointPositionController::JointPositionController()
4646
: joint_state_(NULL), command_(0),
47-
loop_count_(0), initialized_(false), robot_(NULL), last_time_(0)
47+
loop_count_(0), robot_(NULL), last_time_(0)
4848
{
4949
}
5050

@@ -58,7 +58,6 @@ bool JointPositionController::init(pr2_mechanism_model::RobotState *robot, const
5858
{
5959
assert(robot);
6060
robot_ = robot;
61-
last_time_ = robot->getTime();
6261

6362
joint_state_ = robot_->getJointState(joint_name);
6463
if (!joint_state_)
@@ -139,13 +138,7 @@ void JointPositionController::update()
139138
double error(0);
140139
ros::Time time = robot_->getTime();
141140
assert(joint_state_->joint_);
142-
dt_= time - last_time_;
143-
144-
if (!initialized_)
145-
{
146-
initialized_ = true;
147-
command_ = joint_state_->position_;
148-
}
141+
dt_= time - last_time_; //will be 0.0 if starting() was called on this iteration
149142

150143
if(joint_state_->joint_->type == urdf::Joint::REVOLUTE)
151144
{
@@ -175,11 +168,15 @@ void JointPositionController::update()
175168
{
176169
if(controller_state_publisher_ && controller_state_publisher_->trylock())
177170
{
171+
double p_error, i_error, d_error;
172+
pid_controller_.getCurrentPIDErrors(&p_error, &i_error, &d_error);
173+
178174
controller_state_publisher_->msg_.header.stamp = time;
179175
controller_state_publisher_->msg_.set_point = command_;
180176
controller_state_publisher_->msg_.process_value = joint_state_->position_;
181177
controller_state_publisher_->msg_.process_value_dot = joint_state_->velocity_;
182178
controller_state_publisher_->msg_.error = error;
179+
controller_state_publisher_->msg_.i_error = i_error;
183180
controller_state_publisher_->msg_.time_step = dt_.toSec();
184181
controller_state_publisher_->msg_.command = commanded_effort;
185182

robot_mechanism_controllers/src/joint_velocity_controller.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ bool JointVelocityController::init(pr2_mechanism_model::RobotState *robot, const
5656
{
5757
assert(robot);
5858
robot_ = robot;
59-
last_time_ = robot->getTime();
6059

6160
joint_state_ = robot_->getJointState(joint_name);
6261
if (!joint_state_)
@@ -136,18 +135,22 @@ void JointVelocityController::update()
136135
ros::Time time = robot_->getTime();
137136

138137
double error = command_ - joint_state_->velocity_;
139-
dt_ = time - last_time_;
138+
dt_ = time - last_time_; //will be 0.0 if starting() was called on this iteration
140139
double command = pid_controller_.computeCommand(error, dt_);
141140
joint_state_->commanded_effort_ += command;
142141

143142
if(loop_count_ % 10 == 0)
144143
{
145144
if(controller_state_publisher_ && controller_state_publisher_->trylock())
146145
{
146+
double p_error, i_error, d_error;
147+
pid_controller_.getCurrentPIDErrors(&p_error, &i_error, &d_error);
148+
147149
controller_state_publisher_->msg_.header.stamp = time;
148150
controller_state_publisher_->msg_.set_point = command_;
149151
controller_state_publisher_->msg_.process_value = joint_state_->velocity_;
150152
controller_state_publisher_->msg_.error = error;
153+
controller_state_publisher_->msg_.i_error = i_error;
151154
controller_state_publisher_->msg_.time_step = dt_.toSec();
152155
controller_state_publisher_->msg_.command = command;
153156

0 commit comments

Comments
 (0)