@@ -68,16 +68,12 @@ bool RuckigFilterPlugin::initialize(rclcpp::Node::SharedPtr node, moveit::core::
68
68
ruckig_input.max_acceleration = joint_acceleration_bounds_;
69
69
ruckig_input.current_position = std::vector<double >(num_joints_, 0.0 );
70
70
ruckig_input.current_velocity = std::vector<double >(num_joints_, 0.0 );
71
- ruckig_input.current_acceleration = std::vector<double >(num_joints_, 0.0 );
72
71
73
72
// These quantities can be omitted if jerk limits are not applied
74
73
if (joint_jerk_bounds_)
75
74
{
76
75
ruckig_input.max_jerk = *joint_jerk_bounds_;
77
- }
78
- else
79
- {
80
- ruckig_input.max_jerk = std::vector<double >(num_joints_, 0.0 );
76
+ ruckig_input.current_acceleration = std::vector<double >(num_joints_, 0.0 );
81
77
}
82
78
83
79
ruckig_input_ = ruckig_input;
@@ -104,23 +100,30 @@ bool RuckigFilterPlugin::doSmoothing(Eigen::VectorXd& positions, Eigen::VectorXd
104
100
ruckig_input_->current_velocity = ruckig_output_->new_velocity ;
105
101
}
106
102
}
107
- else
108
- {
109
- // TODO
110
- ;
111
- }
112
103
113
104
// Update Ruckig target state
114
105
// This assumes stationary at the target (zero vel, zero accel)
115
106
ruckig_input_->target_position = std::vector<double >(positions.data (), positions.data () + positions.size ());
116
107
ruckig_input_->target_velocity = std::vector<double >(num_joints_, 0 );
117
- ruckig_input_->target_acceleration = std::vector<double >(num_joints_, 0 );
118
108
if (!joint_jerk_bounds_)
119
109
{
110
+ ruckig_input_->target_acceleration = std::vector<double >(num_joints_, 0 );
120
111
ruckig_input_->current_acceleration = std::vector<double >(num_joints_, 0.0 );
121
112
}
122
113
123
114
// Call the Ruckig algorithm
115
+ try
116
+ {
117
+ ruckig_->validate_input (*ruckig_input_, true , true );
118
+ }
119
+ catch (const std::runtime_error& error)
120
+ {
121
+ RCLCPP_ERROR_STREAM (getLogger (), " Invalid Ruckig input. " << error.what () << std::endl);
122
+ }
123
+ if (!ruckig_->validate_input (*ruckig_input_, true , true ))
124
+ {
125
+ std::cerr << " Invalid input!" << std::endl;
126
+ }
124
127
ruckig::Result ruckig_result = ruckig_->update (*ruckig_input_, *ruckig_output_);
125
128
126
129
// Finished means the target state can be reached in this timestep.
0 commit comments