Skip to content

Commit e344ef3

Browse files
author
Hydran00
committed
removed useless vars and added debug_msg package
1 parent a3ef4ce commit e344ef3

File tree

16 files changed

+124
-168
lines changed

16 files changed

+124
-168
lines changed

cartesian_impedance_controller/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@ add_definitions(-DEIGEN_MPL2_ONLY)
1313
find_package(ament_cmake REQUIRED)
1414
find_package(rclcpp REQUIRED)
1515
find_package(effort_controller_base REQUIRED)
16+
find_package(debug_msg REQUIRED)
1617

1718
# Convenience variable for dependencies
1819
set(THIS_PACKAGE_INCLUDE_DEPENDS
1920
rclcpp
2021
effort_controller_base
2122
Eigen3
23+
debug_msg
2224
)
2325

2426
ament_export_dependencies(

cartesian_impedance_controller/include/cartesian_impedance_controller/cartesian_impedance_controller.h

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "effort_controller_base/Utility.h"
1010
#include "geometry_msgs/msg/pose_stamped.hpp"
1111
#include "geometry_msgs/msg/wrench_stamped.hpp"
12-
#include "std_msgs/msg/float64_multi_array.hpp"
12+
#include "debug_msg/msg/debug.hpp"
1313

1414
namespace cartesian_impedance_controller {
1515

@@ -78,7 +78,7 @@ class CartesianImpedanceController
7878
m_target_wrench_subscriber;
7979
rclcpp::Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr
8080
m_target_frame_subscriber;
81-
rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr
81+
rclcpp::Publisher<debug_msg::msg::Debug>::SharedPtr
8282
m_data_publisher;
8383
KDL::Frame m_target_frame;
8484
ctrl::Vector6D m_ft_sensor_wrench;
@@ -90,11 +90,7 @@ class CartesianImpedanceController
9090

9191
ctrl::MatrixND m_identity;
9292
ctrl::VectorND m_q_starting_pose;
93-
ctrl::VectorND m_tau_old;
9493

95-
ctrl::Vector3D m_old_rot_error;
96-
ctrl::VectorND m_old_vel_error;
97-
double const m_alpha = 0.3;
9894
double m_vel_old = 0.0;
9995
double current_acc_j0 = 0.0;
10096
bool m_compensate_dJdq = false;

cartesian_impedance_controller/src/cartesian_impedance_controller.cpp

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ CartesianImpedanceController::on_init() {
2929

3030
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::
3131
CallbackReturn::SUCCESS;
32-
;
3332
}
3433

3534
rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::CallbackReturn
@@ -110,9 +109,8 @@ CartesianImpedanceController::on_configure(
110109
get_node()->get_name() + std::string("/target_frame"), 3,
111110
std::bind(&CartesianImpedanceController::targetFrameCallback, this,
112111
std::placeholders::_1));
113-
m_data_publisher =
114-
get_node()->create_publisher<std_msgs::msg::Float64MultiArray>(
115-
get_node()->get_name() + std::string("/data"), 1);
112+
m_data_publisher = get_node()->create_publisher<debug_msg::msg::Debug>(
113+
get_node()->get_name() + std::string("/data"), 1);
116114

117115
RCLCPP_INFO(get_node()->get_logger(), "Finished Impedance on_configure");
118116
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::
@@ -137,13 +135,6 @@ CartesianImpedanceController::on_activate(
137135

138136
m_q_starting_pose = Base::m_joint_positions.data;
139137

140-
// Initialize the old torque to zero
141-
m_tau_old = ctrl::VectorND::Zero(Base::m_joint_number);
142-
143-
m_old_rot_error = ctrl::Vector3D::Zero();
144-
145-
m_old_vel_error = ctrl::VectorND::Zero(Base::m_joint_number);
146-
147138
m_target_wrench = ctrl::Vector6D::Zero();
148139

149140
return rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface::
@@ -222,6 +213,8 @@ ctrl::VectorND CartesianImpedanceController::computeTorque() {
222213
// Compute the forward kinematics
223214
Base::m_fk_solver->JntToCart(Base::m_joint_positions, m_current_frame);
224215

216+
debug_msg::msg::Debug debug_msg;
217+
225218
// Compute the jacobian
226219
Base::m_jnt_to_jac_solver->JntToJac(Base::m_joint_positions,
227220
Base::m_jacobian);
@@ -256,19 +249,14 @@ ctrl::VectorND CartesianImpedanceController::computeTorque() {
256249
tau_task_old.setZero();
257250
tau_task.setZero();
258251
tau_null.setZero();
259-
260-
261-
// Filter the velocity error
262-
q_dot = m_alpha * q_dot + (1 - m_alpha) * m_old_vel_error;
263-
for (int i = 0; i < q_dot.size(); i++) {
264-
q_dot(i) = std::round(q_dot(i) * 1000) / 1000;
265-
}
266-
m_old_vel_error = q_dot;
267252

268253
// Compute the stiffness and damping in the base link
269254
const auto base_link_stiffness =
270255
Base::displayInBaseLink(m_cartesian_stiffness, Base::m_end_effector_link);
271256

257+
RCLCPP_INFO_STREAM(get_node()->get_logger(), "Stiffness: \n"
258+
<< base_link_stiffness);
259+
272260
// const auto base_link_damping =
273261
// Base::displayInBaseLink(m_cartesian_damping,
274262
// Base::m_end_effector_link);
@@ -277,22 +265,22 @@ ctrl::VectorND CartesianImpedanceController::computeTorque() {
277265
Eigen::VectorXd damping_correction = 5.0 * Eigen::VectorXd::Ones(6);
278266
auto D_d = compute_correct_damping(Lambda, K_d, 1.0);
279267

280-
for(int i = 0; i < 6; i++){
281-
D_d(i,i) = D_d(i,i) + damping_correction(i);
282-
}
283-
268+
// for(int i = 5; i < 6; i++){
269+
D_d(3, 3) = D_d(3, 3) + damping_correction(3);
270+
// }
284271

285272
// Compute the task torque
286273
Eigen::VectorXd Force = (K_d * motion_error - (D_d * (jac * q_dot)));
287274
tau_task = jac.transpose() * Force;
288275

276+
Eigen::VectorXd stiffness_torque = jac.transpose() * (K_d * motion_error);
277+
Eigen::VectorXd damping_torque = jac.transpose() * -(D_d * (jac * q_dot));
278+
289279
// // add damping force for orientation
290280
// Eigen::VectorXd damping_force = (4 * K_d.cwiseSqrt() * (jac * q_dot));
291281
// damping_force.head(3) << 0, 0, 0;
292282
// Force = Force - damping_force;
293283

294-
std_msgs::msg::Float64MultiArray datas;
295-
296284
KDL::JntArray tau_coriolis(Base::m_joint_number),
297285
tau_gravity(Base::m_joint_number);
298286

@@ -339,11 +327,21 @@ ctrl::VectorND CartesianImpedanceController::computeTorque() {
339327
tau_null = ctrl::VectorND::Zero(Base::m_joint_number);
340328
}
341329

330+
for (int i = 0; i < 7; i++) {
331+
debug_msg.stiffness_torque[i] = stiffness_torque(i);
332+
debug_msg.damping_torque[i] = damping_torque(i);
333+
debug_msg.coriolis_torque[i] = tau_coriolis(i);
334+
debug_msg.nullspace_torque[i] = tau_null(i);
335+
if (i < 6) {
336+
debug_msg.impedance_force[i] = Force(i);
337+
}
338+
}
339+
342340
// Compute the torque to achieve the desired force
343341
tau_ext = jac.transpose() * m_target_wrench;
344342

345343
tau += tau_task + tau_null + tau_ext;
346-
m_data_publisher->publish(datas);
344+
m_data_publisher->publish(debug_msg);
347345

348346
return tau;
349347
}

cbf_cartesian_impedance_controller/include/cbf_cartesian_impedance_controller/cbf_cartesian_impedance_controller.hpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,6 @@ class CBFCartesianImpedanceController
7474

7575
ctrl::MatrixND m_identity;
7676
ctrl::VectorND m_q_starting_pose;
77-
ctrl::VectorND m_tau_old;
78-
79-
ctrl::Vector3D m_old_rot_error;
80-
ctrl::VectorND m_old_vel_error;
81-
double const m_alpha = 0.3;
8277
rclcpp::Time m_last_time;
8378

8479
bool m_received_initial_frame = false;

cbf_cartesian_impedance_controller/src/cbf_cartesian_impedance_controller.cpp

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,6 @@ CBFCartesianImpedanceController::on_activate(
139139

140140
m_q_starting_pose = Base::m_joint_positions.data;
141141

142-
// Initialize the old torque to zero
143-
m_tau_old = ctrl::VectorND::Zero(Base::m_joint_number);
144-
145-
m_old_rot_error = ctrl::Vector3D::Zero();
146-
147-
m_old_vel_error = ctrl::VectorND::Zero(Base::m_joint_number);
148-
149142
m_target_wrench = ctrl::Vector6D::Zero();
150143

151144
m_last_time = get_node()->get_clock()->now();
@@ -166,8 +159,9 @@ CBFCartesianImpedanceController::on_deactivate(
166159
CallbackReturn::SUCCESS;
167160
}
168161

169-
controller_interface::return_type CBFCartesianImpedanceController::update(
170-
const rclcpp::Time &time, const rclcpp::Duration &period) {
162+
controller_interface::return_type
163+
CBFCartesianImpedanceController::update(const rclcpp::Time &time,
164+
const rclcpp::Duration &period) {
171165
// Update joint states
172166
Base::updateJointStates();
173167

@@ -195,7 +189,7 @@ ctrl::Vector6D CBFCartesianImpedanceController::computeMotionError() {
195189
// Use Rodrigues Vector for a compact representation of orientation errors
196190
// Only for angles within [0,Pi)
197191
KDL::Vector rot_axis = KDL::Vector::Zero();
198-
double angle = error_kdl.M.GetRotAngle(rot_axis); // rot_axis is normalized
192+
double angle = error_kdl.M.GetRotAngle(rot_axis); // rot_axis is normalized
199193
double distance = error_kdl.p.Normalize();
200194

201195
// Clamp maximal tolerated error.
@@ -296,13 +290,6 @@ ctrl::VectorND CBFCartesianImpedanceController::computeTorque() {
296290
ctrl::VectorND tau_task(Base::m_joint_number), tau_null(Base::m_joint_number),
297291
tau_ext(Base::m_joint_number);
298292

299-
// Filter the velocity errorm_old_vel_error
300-
// q_dot = m_alpha * q_dot + (1 - m_alpha) * m_old_vel_error;
301-
// for (int i = 0; i < q_dot.size(); i++) {
302-
// q_dot(i) = std::round(q_dot(i) * 1000) / 1000;
303-
// }
304-
// m_old_vel_error = q_dot;
305-
306293
// Compute the stiffness and damping in the base link
307294
const auto base_link_stiffness =
308295
Base::displayInBaseLink(m_cartesian_stiffness, Base::m_end_effector_link);
@@ -380,7 +367,7 @@ void CBFCartesianImpedanceController::targetFrameCallback(
380367
m_received_initial_frame = true;
381368
}
382369
}
383-
} // namespace cbf_cartesian_impedance_controller
370+
} // namespace cbf_cartesian_impedance_controller
384371

385372
// Pluginlib
386373
#include <pluginlib/class_list_macros.hpp>

debug_msg/CMakeLists.txt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
cmake_minimum_required(VERSION 3.22)
2+
project(debug_msg)
3+
4+
# Default to C++14
5+
if(NOT CMAKE_CXX_STANDARD)
6+
set(CMAKE_CXX_STANDARD 14)
7+
endif()
8+
9+
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
10+
add_compile_options(-Wall -Wextra -Wpedantic)
11+
endif()
12+
13+
if(NOT CMAKE_BUILD_TYPE)
14+
set(CMAKE_BUILD_TYPE Release CACHE STRING "Build type" FORCE)
15+
endif()
16+
17+
# find dependencies
18+
find_package(ament_cmake REQUIRED)
19+
find_package(rosidl_default_generators REQUIRED)
20+
21+
rosidl_generate_interfaces(debug_msg
22+
msg/Debug.msg
23+
)
24+
25+
ament_export_dependencies(rosidl_default_runtime)
26+
27+
if (BUILD_TESTING)
28+
find_package(ament_cmake_gtest REQUIRED)
29+
find_package(FRIClient REQUIRED)
30+
31+
# link against messages from same package
32+
rosidl_get_typesupport_target(cpp_typesupport_target ${PROJECT_NAME} rosidl_typesupport_cpp)
33+
add_library(${PROJECT_NAME}_library INTERFACE)
34+
target_include_directories(${PROJECT_NAME}_library INTERFACE
35+
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
36+
$<INSTALL_INTERFACE:include/${PROJECT_NAME}>
37+
)
38+
target_link_libraries(${PROJECT_NAME}_library INTERFACE
39+
${cpp_typesupport_target}
40+
)
41+
42+
endif()
43+
44+
ament_package()

debug_msg/msg/Debug.msg

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
float64[7] commanded_torque
2+
float64[7] stiffness_torque
3+
float64[7] damping_torque
4+
float64[7] coriolis_torque
5+
float64[7] nullspace_torque
6+
float64[6] impedance_force

debug_msg/package.xml

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0"?>
2+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
3+
<package format="3">
4+
<name>debug_msg</name>
5+
<version>1.5.0</version>
6+
<description>ROS 2 message for debugging effort controller.</description>
7+
<maintainer email="davide.nardi-1@unitn.it">Davide</maintainer>
8+
<license>Apache License 2.0</license>
9+
10+
<buildtool_depend>ament_cmake</buildtool_depend>
11+
<buildtool_depend>rosidl_default_generators</buildtool_depend>
12+
13+
<depend>builtin_interfaces</depend>
14+
15+
<exec_depend>rosidl_default_runtime</exec_depend>
16+
17+
<test_depend>ament_lint_common</test_depend>
18+
<test_depend>ament_cmake_gtest</test_depend>
19+
20+
<member_of_group>rosidl_interface_packages</member_of_group>
21+
22+
<export>
23+
<build_type>ament_cmake</build_type>
24+
</export>
25+
</package>

effort_controller_base/CMakeLists.txt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ find_package(kdl_parser REQUIRED)
2323
find_package(trajectory_msgs REQUIRED)
2424
find_package(pluginlib REQUIRED)
2525
find_package(urdf REQUIRED)
26-
find_package(lbr_fri_idl)
2726

2827
# Convenience variable for dependencies
2928
set(THIS_PACKAGE_INCLUDE_DEPENDS
@@ -33,7 +32,6 @@ set(THIS_PACKAGE_INCLUDE_DEPENDS
3332
pluginlib
3433
urdf
3534
Eigen3
36-
lbr_fri_idl
3735
)
3836

3937
ament_export_dependencies(

effort_controller_base/include/effort_controller_base/effort_controller_base.h

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
#include "controller_interface/helpers.hpp"
3737
#include "double_diagonalization.hpp"
3838
#include "hardware_interface/types/hardware_interface_type_values.hpp"
39-
#include "lbr_fri_idl/msg/lbr_state.hpp"
4039
#include "pseudo_inversion.h"
4140
#include "rclcpp_lifecycle/lifecycle_node.hpp"
4241
#include "rclcpp_lifecycle/node_interfaces/lifecycle_node_interface.hpp"
@@ -201,19 +200,14 @@ class EffortControllerBase : public controller_interface::ControllerInterface {
201200
m_joint_state_pos_handles;
202201
std::vector<std::reference_wrapper<hardware_interface::LoanedStateInterface>>
203202
m_joint_state_vel_handles;
204-
rclcpp::Subscription<lbr_fri_idl::msg::LBRState>::SharedPtr
205-
m_lbr_state_subscriber;
206-
rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr
207-
m_commanded_torque_publisher;
208-
rclcpp::Publisher<std_msgs::msg::Float64MultiArray>::SharedPtr
209-
m_measured_torque_publisher;
210-
211203
size_t m_joint_number;
212204

213205
KDL::JntArray m_joint_positions;
214206
KDL::JntArray m_joint_velocities;
207+
KDL::JntArray m_old_joint_velocities;
215208
KDL::JntArray m_simulated_joint_motion;
216209

210+
217211
private:
218212
std::vector<std::string> m_cmd_interface_types;
219213
std::vector<std::string> m_state_interface_types;
@@ -232,7 +226,8 @@ class EffortControllerBase : public controller_interface::ControllerInterface {
232226
bool m_initialized = {false};
233227
bool m_configured = {false};
234228
bool m_active = {false};
235-
229+
// joint velocity filter
230+
const double m_dotq_alpha = 0.3;
236231
// Dynamic parameters
237232
std::string m_robot_description;
238233

0 commit comments

Comments
 (0)