|
@@ -36,15 +36,13 @@ namespace sophiar {
|
|
|
if (cur_trans == nullptr || tar_trans == nullptr) [[unlikely]] {
|
|
if (cur_trans == nullptr || tar_trans == nullptr) [[unlikely]] {
|
|
|
UPDATE_VARIABLE_WITH_TS(transform_obj, offset_index, nullptr, ts);
|
|
UPDATE_VARIABLE_WITH_TS(transform_obj, offset_index, nullptr, ts);
|
|
|
} else [[likely]] {
|
|
} else [[likely]] {
|
|
|
|
|
+ auto dof6_trans = cur_trans->value.inverse() * tar_trans->value;
|
|
|
auto z_axis = Eigen::Vector3d::UnitZ();
|
|
auto z_axis = Eigen::Vector3d::UnitZ();
|
|
|
- auto cur_z_axis = cur_trans->value.linear() * z_axis;
|
|
|
|
|
- auto tar_z_axis = tar_trans->value.linear() * z_axis;
|
|
|
|
|
- auto rot_part = Eigen::Quaterniond::FromTwoVectors(cur_z_axis, tar_z_axis);
|
|
|
|
|
- auto trans_part = Eigen::Translation3d{
|
|
|
|
|
- tar_trans->value.translation() - cur_trans->value.translation()};
|
|
|
|
|
|
|
+ auto new_z_axis = dof6_trans.linear() * z_axis;
|
|
|
|
|
+ auto dof5_rot = Eigen::Quaterniond::FromTwoVectors(z_axis, new_z_axis);
|
|
|
|
|
+ auto dof5_trans = Eigen::Translation3d{dof6_trans.translation()};
|
|
|
auto offset = transform_obj::new_instance();
|
|
auto offset = transform_obj::new_instance();
|
|
|
- offset->value = trans_part * rot_part;
|
|
|
|
|
- offset->value = cur_trans->value.inverse() * offset->value * cur_trans->value;
|
|
|
|
|
|
|
+ offset->value = dof5_trans * dof5_rot;
|
|
|
UPDATE_VARIABLE_WITH_TS(transform_obj, offset_index, offset, ts);
|
|
UPDATE_VARIABLE_WITH_TS(transform_obj, offset_index, offset, ts);
|
|
|
}
|
|
}
|
|
|
co_return true;
|
|
co_return true;
|