@@ -86,22 +86,22 @@ class SystemInterface : public hardware_interface::SystemInterface {
8686
8787 void nan_interfaces () const {
8888 for (std::size_t i = 0 ; i < lbr_fri_ros2::N_JNTS; ++i) {
89- joint_position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
90- torque[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
89+ std::ignore = joint_position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
90+ std::ignore = torque[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
9191 }
9292 for (std::size_t i = 0 ; i < lbr_fri_ros2::CARTESIAN_DOF; ++i) {
93- wrench[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
93+ std::ignore = wrench[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
9494 }
9595 }
9696
9797 void pull (lbr_fri_idl::msg::LBRCommand &lbr_command) const {
9898 // populate command message
9999 for (std::size_t i = 0 ; i < lbr_fri_ros2::N_JNTS; ++i) {
100- lbr_command.joint_position [i] = joint_position[i]->get_value ();
101- lbr_command.torque [i] = torque[i]->get_value ();
100+ lbr_command.joint_position [i] = joint_position[i]->get_optional (). value ();
101+ lbr_command.torque [i] = torque[i]->get_optional (). value ();
102102 }
103103 for (std::size_t i = 0 ; i < lbr_fri_ros2::CARTESIAN_DOF; ++i) {
104- lbr_command.wrench [i] = wrench[i]->get_value ();
104+ lbr_command.wrench [i] = wrench[i]->get_optional (). value ();
105105 }
106106 }
107107 };
@@ -168,28 +168,29 @@ class SystemInterface : public hardware_interface::SystemInterface {
168168 void nan_interfaces () const {
169169 // joint state interfaces
170170 for (std::size_t i = 0 ; i < lbr_fri_ros2::N_JNTS; ++i) {
171- position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
171+ std::ignore = position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
172172#if FRI_CLIENT_VERSION_MAJOR == 1
173- commanded_joint_position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
173+ std::ignore =
174+ commanded_joint_position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
174175#endif
175- effort[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
176- commanded_torque[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
177- external_torque[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
178- ipo_joint_position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
179- velocity[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
176+ std::ignore = effort[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
177+ std::ignore = commanded_torque[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
178+ std::ignore = external_torque[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
179+ std::ignore = ipo_joint_position[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
180+ std::ignore = velocity[i]->set_value (std::numeric_limits<double >::quiet_NaN ());
180181 }
181- sample_time->set_value (std::numeric_limits<double >::quiet_NaN ());
182- tracking_performance->set_value (std::numeric_limits<double >::quiet_NaN ());
183- session_state->set_value (std::numeric_limits<double >::quiet_NaN ());
184- connection_quality->set_value (std::numeric_limits<double >::quiet_NaN ());
185- safety_state->set_value (std::numeric_limits<double >::quiet_NaN ());
186- operation_mode->set_value (std::numeric_limits<double >::quiet_NaN ());
187- drive_state->set_value (std::numeric_limits<double >::quiet_NaN ());
188- client_command_mode->set_value (std::numeric_limits<double >::quiet_NaN ());
189- overlay_type->set_value (std::numeric_limits<double >::quiet_NaN ());
190- control_mode->set_value (std::numeric_limits<double >::quiet_NaN ());
191- time_stamp_sec->set_value (std::numeric_limits<double >::quiet_NaN ());
192- time_stamp_nano_sec->set_value (std::numeric_limits<double >::quiet_NaN ());
182+ std::ignore = sample_time->set_value (std::numeric_limits<double >::quiet_NaN ());
183+ std::ignore = tracking_performance->set_value (std::numeric_limits<double >::quiet_NaN ());
184+ std::ignore = session_state->set_value (std::numeric_limits<double >::quiet_NaN ());
185+ std::ignore = connection_quality->set_value (std::numeric_limits<double >::quiet_NaN ());
186+ std::ignore = safety_state->set_value (std::numeric_limits<double >::quiet_NaN ());
187+ std::ignore = operation_mode->set_value (std::numeric_limits<double >::quiet_NaN ());
188+ std::ignore = drive_state->set_value (std::numeric_limits<double >::quiet_NaN ());
189+ std::ignore = client_command_mode->set_value (std::numeric_limits<double >::quiet_NaN ());
190+ std::ignore = overlay_type->set_value (std::numeric_limits<double >::quiet_NaN ());
191+ std::ignore = control_mode->set_value (std::numeric_limits<double >::quiet_NaN ());
192+ std::ignore = time_stamp_sec->set_value (std::numeric_limits<double >::quiet_NaN ());
193+ std::ignore = time_stamp_nano_sec->set_value (std::numeric_limits<double >::quiet_NaN ());
193194 }
194195
195196 void
@@ -198,31 +199,34 @@ class SystemInterface : public hardware_interface::SystemInterface {
198199 // set the joint state interfaces
199200 for (std::size_t i = 0 ; i < lbr_fri_ros2::N_JNTS; ++i) {
200201#if FRI_CLIENT_VERSION_MAJOR == 1
201- commanded_joint_position[i]->set_value (lbr_state.commanded_joint_position [i]);
202+ std::ignore = commanded_joint_position[i]->set_value (lbr_state.commanded_joint_position [i]);
202203#endif
203- commanded_torque[i]->set_value (lbr_state.commanded_torque [i]);
204- ipo_joint_position[i]->set_value (lbr_state.ipo_joint_position [i]);
205- position[i]->set_value (lbr_state.measured_joint_position [i]);
206- external_torque[i]->set_value (lbr_state.external_torque [i]);
207- effort[i]->set_value (lbr_state.measured_torque [i]);
208- velocity[i]->set_value (velocity_estimate[i]);
204+ std::ignore = commanded_torque[i]->set_value (lbr_state.commanded_torque [i]);
205+ std::ignore = ipo_joint_position[i]->set_value (lbr_state.ipo_joint_position [i]);
206+ std::ignore = position[i]->set_value (lbr_state.measured_joint_position [i]);
207+ std::ignore = external_torque[i]->set_value (lbr_state.external_torque [i]);
208+ std::ignore = effort[i]->set_value (lbr_state.measured_torque [i]);
209+ std::ignore = velocity[i]->set_value (velocity_estimate[i]);
209210 }
210211
211212 // state interfaces without cast
212- sample_time->set_value (lbr_state.sample_time );
213- tracking_performance->set_value (lbr_state.tracking_performance );
213+ std::ignore = sample_time->set_value (lbr_state.sample_time );
214+ std::ignore = tracking_performance->set_value (lbr_state.tracking_performance );
214215
215216 // state interfaces with cast
216- session_state->set_value (static_cast <double >(lbr_state.session_state ));
217- connection_quality->set_value (static_cast <double >(lbr_state.connection_quality ));
218- safety_state->set_value (static_cast <double >(lbr_state.safety_state ));
219- operation_mode->set_value (static_cast <double >(lbr_state.operation_mode ));
220- drive_state->set_value (static_cast <double >(lbr_state.drive_state ));
221- client_command_mode->set_value (static_cast <double >(lbr_state.client_command_mode ));
222- overlay_type->set_value (static_cast <double >(lbr_state.overlay_type ));
223- control_mode->set_value (static_cast <double >(lbr_state.control_mode ));
224- time_stamp_sec->set_value (static_cast <double >(lbr_state.time_stamp_sec ));
225- time_stamp_nano_sec->set_value (static_cast <double >(lbr_state.time_stamp_nano_sec ));
217+ std::ignore = session_state->set_value (static_cast <double >(lbr_state.session_state ));
218+ std::ignore =
219+ connection_quality->set_value (static_cast <double >(lbr_state.connection_quality ));
220+ std::ignore = safety_state->set_value (static_cast <double >(lbr_state.safety_state ));
221+ std::ignore = operation_mode->set_value (static_cast <double >(lbr_state.operation_mode ));
222+ std::ignore = drive_state->set_value (static_cast <double >(lbr_state.drive_state ));
223+ std::ignore =
224+ client_command_mode->set_value (static_cast <double >(lbr_state.client_command_mode ));
225+ std::ignore = overlay_type->set_value (static_cast <double >(lbr_state.overlay_type ));
226+ std::ignore = control_mode->set_value (static_cast <double >(lbr_state.control_mode ));
227+ std::ignore = time_stamp_sec->set_value (static_cast <double >(lbr_state.time_stamp_sec ));
228+ std::ignore =
229+ time_stamp_nano_sec->set_value (static_cast <double >(lbr_state.time_stamp_nano_sec ));
226230 }
227231 };
228232
@@ -286,6 +290,9 @@ class SystemInterface : public hardware_interface::SystemInterface {
286290 std::shared_ptr<lbr_fri_ros2::AsyncClient> async_client_ptr_;
287291 std::unique_ptr<lbr_fri_ros2::App> app_ptr_;
288292
293+ // session state tracking
294+ KUKA::FRI::ESessionState previous_session_state_;
295+
289296 // velocity computation
290297 lbr_fri_idl::msg::LBRState::_measured_joint_position_type last_measured_joint_position_,
291298 velocity_;
0 commit comments