25 #include <Eigen/Geometry>
27 #include <SimoxUtility/math/convert/mat4f_to_rpy.h>
28 #include <VirtualRobot/MathTools.h>
31 #include <RobotAPI/interface/core/GeometryBase.h>
32 #include <RobotAPI/interface/core/PoseBase.h>
55 std::lock_guard<std::mutex> guard{dataMutex};
61 FrameHeader odomVelocityHeader;
62 odomVelocityHeader.parentFrame = robotRootFrame;
63 odomVelocityHeader.frame = robotRootFrame;
64 odomVelocityHeader.agent = agentName;
65 odomVelocityHeader.timestampInMicroSeconds = timestamp;
68 FrameHeader odomPoseHeader;
70 odomPoseHeader.frame = robotRootFrame;
71 odomPoseHeader.agent = agentName;
72 odomPoseHeader.timestampInMicroSeconds = timestamp;
75 FrameHeader globalPoseHeader;
77 globalPoseHeader.frame = robotRootFrame;
78 globalPoseHeader.agent = agentName;
79 globalPoseHeader.timestampInMicroSeconds = timestamp;
89 const auto odom_T_robot = VirtualRobot::MathTools::posrpy2eigen4f(
90 s->relativePositionX,
s->relativePositionY, 0, 0, 0,
s->relativePositionRotation);
117 const TransformStamped odomPose{.header = odomPoseHeader, .transform = odom_T_robot};
118 odometryPrx->reportOdometryPose(odomPose);
122 listenerPrx->reportPlatformOdometryPose(
123 odomLegacyPose.x, odomLegacyPose.y, odomLegacyPose.rotationAroundZ);
132 TwistStamped odomVelocity;
133 odomVelocity.header = odomVelocityHeader;
134 odomVelocity.twist.linear <<
s->velocityX,
s->velocityY, 0;
135 odomVelocity.twist.angular << 0, 0,
s->velocityRotation;
137 odometryPrx->reportOdometryVelocity(odomVelocity);
140 const auto& vel = odomVelocity.twist;
141 listenerPrx->reportPlatformVelocity(vel.linear.x(), vel.linear.y(), vel.angular.z());
149 if (!pt->isControllerActive())
151 pt->activateController();
153 std::lock_guard<std::mutex> guard{dataMutex};
154 pt->setVelocites(
std::clamp(vx, -maxVLin, maxVLin),
167 globalPosCtrl->setTarget(rx, ry, rr, lac, rac);
168 if (!globalPosCtrl->isControllerActive())
170 globalPosCtrl->activateController();
182 relativePosCtrl->setTarget(rx, ry, rr, lac, rac);
183 if (!relativePosCtrl->isControllerActive())
185 relativePosCtrl->activateController();
197 std::lock_guard<std::mutex> guard{dataMutex};