30 #include <mc_rbdyn/Robot.h>
31 #include <mc_rtc/Configuration.h>
32 #include <mc_rtc/constants.h>
33 #include <mc_rtc/logging.h>
34 #include <mc_tasks/lipm_stabilizer/Contact.h>
36 #include <SpaceVecAlg/SpaceVecAlg>
44 using HrepXd = std::pair<Eigen::MatrixXd, Eigen::VectorXd>;
53 EIGEN_MAKE_ALIGNED_OPERATOR_NEW
74 return pose.rotation().row(0);
82 return pose.rotation().row(1);
90 return pose.rotation().row(2);
98 return pose.translation();
104 const Eigen::Vector3d &
p()
const
126 mc_rtc::log::error(
"Cannot compute anklePos for surface {}",
surfaceName);
220 return minCoord<0>();
228 return maxCoord<0>();
236 return minCoord<1>();
244 return maxCoord<1>();
252 return minCoord<2>();
260 return maxCoord<2>();
268 Eigen::Matrix<double, 4, 2> localHrepMat, worldHrepMat;
269 Eigen::Matrix<double, 4, 1> localHrepVec, worldHrepVec;
282 if((
normal() - mc_rtc::constants::vertical).norm() > 1e-3)
284 mc_rtc::log::warning(
"Contact is not horizontal");
286 const sva::PTransformd & X_0_c =
pose;
287 worldHrepMat = localHrepMat * X_0_c.rotation().topLeftCorner<2, 2>();
288 worldHrepVec = worldHrepMat * X_0_c.translation().head<2>() + localHrepVec;
289 return HrepXd(worldHrepMat, worldHrepVec);
299 const sva::PTransformd & X_0_c =
pose;
300 const sva::PTransformd & X_0_fb = robot.posW();
301 sva::PTransformd X_s_0 = robot.surfacePose(
surfaceName).inv();
302 sva::PTransformd X_s_fb = X_0_fb * X_s_0;
303 return X_s_fb * X_0_c;
308 Eigen::Vector3d::Zero();
311 mc_rtc::Configuration
341 contact.
pose = config(
"pose");
344 config(
"ref_vel", contact.
refVel);
346 if(config.has(
"swing"))
355 mc_rtc::Configuration config;
356 config.add(
"half_length", contact.
halfLength);
357 config.add(
"half_width", contact.
halfWidth);
358 config.add(
"pose", contact.
pose);
359 config.add(
"ref_vel", contact.
refVel);
std::pair< Eigen::MatrixXd, Eigen::VectorXd > HrepXd
Contact operator*(const sva::PTransformd &X, const Contact &contact)
mc_tasks::lipm_stabilizer::ContactState ContactState
EIGEN_MAKE_ALIGNED_OPERATOR_NEW Eigen::Vector2d leftAnkleOffset