@@ -26,16 +26,18 @@ bool KinematicsInterface::convert_cartesian_deltas_to_joint_deltas(
26
26
std::vector<double > & joint_pos_vec, const std::vector<double > & delta_x_vec,
27
27
const std::string & link_name, std::vector<double > & delta_theta_vec)
28
28
{
29
- auto joint_pos = Eigen::Map<const Eigen::VectorXd>(joint_pos_vec.data (), joint_pos_vec.size ());
30
- auto delta_x = Eigen::Map<const Eigen::VectorXd>(delta_x_vec.data (), delta_x_vec.size ());
29
+ auto joint_pos = Eigen::Map<const Eigen::VectorXd>(
30
+ joint_pos_vec.data (), static_cast <Eigen::Index>(joint_pos_vec.size ()));
31
+ auto delta_x = Eigen::Map<const Eigen::VectorXd>(
32
+ delta_x_vec.data (), static_cast <Eigen::Index>(delta_x_vec.size ()));
31
33
// TODO(anyone): heap allocation should be removed for realtime use
32
- Eigen::VectorXd delta_theta =
33
- Eigen::Map<Eigen::VectorXd>( delta_theta_vec.data (), delta_theta_vec.size ());
34
+ Eigen::VectorXd delta_theta = Eigen::Map<Eigen::VectorXd>(
35
+ delta_theta_vec.data (), static_cast <Eigen::Index>( delta_theta_vec.size () ));
34
36
35
37
bool ret = convert_cartesian_deltas_to_joint_deltas (joint_pos, delta_x, link_name, delta_theta);
36
38
for (auto i = 0ul ; i < delta_theta_vec.size (); i++)
37
39
{
38
- delta_theta_vec[i] = delta_theta[i ];
40
+ delta_theta_vec[i] = delta_theta[static_cast <Eigen::Index>(i) ];
39
41
}
40
42
return ret;
41
43
}
@@ -44,9 +46,10 @@ bool KinematicsInterface::convert_joint_deltas_to_cartesian_deltas(
44
46
const std::vector<double > & joint_pos_vec, const std::vector<double > & delta_theta_vec,
45
47
const std::string & link_name, std::vector<double > & delta_x_vec)
46
48
{
47
- auto joint_pos = Eigen::Map<const Eigen::VectorXd>(joint_pos_vec.data (), joint_pos_vec.size ());
48
- Eigen::VectorXd delta_theta =
49
- Eigen::Map<const Eigen::VectorXd>(delta_theta_vec.data (), delta_theta_vec.size ());
49
+ auto joint_pos = Eigen::Map<const Eigen::VectorXd>(
50
+ joint_pos_vec.data (), static_cast <Eigen::Index>(joint_pos_vec.size ()));
51
+ Eigen::VectorXd delta_theta = Eigen::Map<const Eigen::VectorXd>(
52
+ delta_theta_vec.data (), static_cast <Eigen::Index>(delta_theta_vec.size ()));
50
53
if (delta_x_vec.size () != 6 )
51
54
{
52
55
RCLCPP_ERROR (
@@ -57,7 +60,7 @@ bool KinematicsInterface::convert_joint_deltas_to_cartesian_deltas(
57
60
bool ret = convert_joint_deltas_to_cartesian_deltas (joint_pos, delta_theta, link_name, delta_x);
58
61
for (auto i = 0ul ; i < delta_x_vec.size (); i++)
59
62
{
60
- delta_x_vec[i] = delta_x[i ];
63
+ delta_x_vec[i] = delta_x[static_cast <Eigen::Index>(i) ];
61
64
}
62
65
return ret;
63
66
}
@@ -66,7 +69,8 @@ bool KinematicsInterface::calculate_link_transform(
66
69
const std::vector<double > & joint_pos_vec, const std::string & link_name,
67
70
Eigen::Isometry3d & transform)
68
71
{
69
- auto joint_pos = Eigen::Map<const Eigen::VectorXd>(joint_pos_vec.data (), joint_pos_vec.size ());
72
+ auto joint_pos = Eigen::Map<const Eigen::VectorXd>(
73
+ joint_pos_vec.data (), static_cast <Eigen::Index>(joint_pos_vec.size ()));
70
74
71
75
return calculate_link_transform (joint_pos, link_name, transform);
72
76
}
@@ -75,7 +79,8 @@ bool KinematicsInterface::calculate_jacobian(
75
79
const std::vector<double > & joint_pos_vec, const std::string & link_name,
76
80
Eigen::Matrix<double , 6 , Eigen::Dynamic> & jacobian)
77
81
{
78
- auto joint_pos = Eigen::Map<const Eigen::VectorXd>(joint_pos_vec.data (), joint_pos_vec.size ());
82
+ auto joint_pos = Eigen::Map<const Eigen::VectorXd>(
83
+ joint_pos_vec.data (), static_cast <Eigen::Index>(joint_pos_vec.size ()));
79
84
80
85
return calculate_jacobian (joint_pos, link_name, jacobian);
81
86
}
@@ -84,9 +89,46 @@ bool KinematicsInterface::calculate_jacobian_inverse(
84
89
const std::vector<double > & joint_pos_vec, const std::string & link_name,
85
90
Eigen::Matrix<double , Eigen::Dynamic, 6 > & jacobian_inverse)
86
91
{
87
- auto joint_pos = Eigen::Map<const Eigen::VectorXd>(joint_pos_vec.data (), joint_pos_vec.size ());
92
+ auto joint_pos = Eigen::Map<const Eigen::VectorXd>(
93
+ joint_pos_vec.data (), static_cast <Eigen::Index>(joint_pos_vec.size ()));
88
94
89
95
return calculate_jacobian_inverse (joint_pos, link_name, jacobian_inverse);
90
96
}
91
97
98
+ <<<<<<< HEAD
99
+ =======
100
+ bool KinematicsInterface::calculate_frame_difference (
101
+ std::vector<double > & x_a_vec, std::vector<double > & x_b_vec, double dt,
102
+ std::vector<double > & delta_x_vec)
103
+ {
104
+ if (x_a_vec.size () != 7 )
105
+ {
106
+ RCLCPP_ERROR (
107
+ LOGGER, " The length of the first cartesian vector (%zu) must be 7." , x_a_vec.size ());
108
+ return false ;
109
+ }
110
+ Eigen::Matrix<double , 7 , 1 > x_a (x_a_vec.data ());
111
+ if (x_b_vec.size () != 7 )
112
+ {
113
+ RCLCPP_ERROR (
114
+ LOGGER, " The length of the second cartesian vector (%zu) must be 7." , x_b_vec.size ());
115
+ return false ;
116
+ }
117
+ Eigen::Matrix<double , 7 , 1 > x_b (x_b_vec.data ());
118
+ if (delta_x_vec.size () != 6 )
119
+ {
120
+ RCLCPP_ERROR (
121
+ LOGGER, " The length of the cartesian delta vector (%zu) must be 6." , delta_x_vec.size ());
122
+ return false ;
123
+ }
124
+ Eigen::Matrix<double , 6 , 1 > delta_x (delta_x_vec.data ());
125
+ bool ret = calculate_frame_difference (x_a, x_b, dt, delta_x);
126
+ for (auto i = 0ul ; i < delta_x_vec.size (); i++)
127
+ {
128
+ delta_x_vec[i] = delta_x[static_cast <Eigen::Index>(i)];
129
+ }
130
+ return ret;
131
+ }
132
+
133
+ >>>>>>> 048a964 (Use ros2_control_cmake (#118 ))
92
134
} // namespace kinematics_interface
0 commit comments