5 #include <Ice/Current.h>
6 #include <IceUtil/Time.h>
8 #include <VirtualRobot/VirtualRobot.h>
14 #include <ArmarXCore/interface/core/ManagedIceObjectDefinitions.h>
15 #include <ArmarXCore/interface/observers/ObserverInterface.h>
16 #include <ArmarXCore/interface/observers/VariantBase.h>
17 #include <ArmarXCore/interface/serialization/Eigen/Eigen_fdi.h>
25 #include <RobotAPI/interface/units/RobotUnit/NJointController.h>
26 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
28 #include <armarx/control/interface/ConfigurableNJointControllerInterface.h>
30 #include <armarx/navigation/platform_controller/aron/PlatformLocalTrajectoryControllerConfig.aron.generated.h>
35 const NJointControllerRegistration<Controller>
Registration(
39 const NJointControllerConfigPtr& config,
46 ConfigPtrT cfg = ConfigPtrT::dynamicCast(config);
55 ControlModes::HolonomicPlatformVelocity)
58 <<
"The actuator " << robotUnit->getRobotPlatformName() <<
" has no control mode "
59 << ControlModes::HolonomicPlatformVelocity;
61 const auto configData = ::armarx::fromAron<arondto::Config, Config>(cfg->config);
62 const auto trajectoryFollowingControllerParams = configData.params;
68 trajectoryFollowingController.emplace(trajectoryFollowingControllerParams);
92 robotStateBuffer_rtToAdditionalTask.
getWriteBuffer().global_T_robot.matrix() =
99 const Ice::Current& iceCurrent)
105 const auto updateConfig = ::armarx::fromAron<arondto::Config, Config>(dto);
108 configBuffer_updateConfigToAdditionalTask.
commitWrite();
111 configBuffer_updateConfigToOnPublish.
commitWrite();
121 ARMARX_CHECK(trajectoryFollowingController.has_value());
123 const auto& configBuffer =
127 if (configBuffer.targets.trajectory.points().empty())
131 filteredTwist.
reset();
139 const auto result = trajectoryFollowingController->control(
140 configBuffer.targets.trajectory,
145 const float alpha = configBuffer.params.alpha;
147 alpha * filteredTwist.
linear + (1. - alpha) * result.twist.linear.head<2>();
149 alpha * filteredTwist.
angular + (1. - alpha) * result.twist.angular.z();
157 targetBuffer_additionalTaskToOnPublish.
getWriteBuffer() = filteredTwist;
158 targetBuffer_additionalTaskToOnPublish.
commitWrite();
173 datafields[
"trajectory_points"] =
175 .targets.trajectory.points()
178 debugObservers->setDebugChannel(
186 runTask(
"PlatformTrajectoryControllerAdditionalTask",
191 ARMARX_IMPORTANT <<
"Create a new thread alone PlatformTrajectory controller";
192 while (
getState() == eManagedIceObjectStarted)
199 c.waitForCycleDuration();
203 ARMARX_INFO <<
"PlatformTrajectoryVelocityController::onInitNJointController";
210 filteredTwist.
reset();
212 robotStateBuffer_rtToAdditionalTask.
getWriteBuffer().global_T_robot.matrix() =
222 rtReady.store(
false);