diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.cpp b/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.cpp index f248ce502ba483dbac4603f86e6a26a7aecaff12..57f7cf102806a02d1bf502eaf5920e6b43dfff3f 100644 --- a/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.cpp +++ b/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.cpp @@ -1,4 +1,5 @@ #include "GlobalRobotPoseSensorDevice.h" +#include "ArmarXCore/core/logging/Logging.h" #include <SimoxUtility/math/convert/pos_rpy_to_mat4f.h> @@ -138,6 +139,7 @@ namespace armarx if (sensorGlobalPositionCorrection == nullptr or sensorRelativePosition == nullptr) { + ARMARX_ERROR << "one of the sensors is not available"; return; } @@ -150,5 +152,7 @@ namespace armarx 0, sensorRelativePosition->relativePositionRotation); const auto global_T_robot = global_T_relative * relative_T_robot; + + sensor.global_T_root = global_T_robot; } } // namespace armarx diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h b/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h index d60e8c887fc6be28d85b019b1455b623fa1013b8..c3cd19f4a3777a6903ceca8b4a1e8660f25b617b 100644 --- a/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h +++ b/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.h @@ -29,6 +29,8 @@ namespace armarx using Transformation = Eigen::Matrix4f; Transformation global_T_odom = Transformation::Identity(); + // TODO add timestamp + static SensorValueInfo<SensorValueGlobalPoseCorrection> GetClassMemberInfo(); bool isAvailable() const; @@ -93,8 +95,7 @@ namespace armarx void rtReadSensorValues(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration) override; - - private: + protected: SensorValueType sensor; }; @@ -110,11 +111,9 @@ namespace armarx void rtReadSensorValues(const IceUtil::Time& sensorValuesTimestamp, const IceUtil::Time& timeSinceLastIteration) override; - SensorValueGlobalPoseCorrection* sensorGlobalPositionCorrection; - SensorValueHolonomicPlatformRelativePosition* sensorRelativePosition; + const SensorValueGlobalPoseCorrection* sensorGlobalPositionCorrection; + const SensorValueHolonomicPlatformRelativePosition* sensorRelativePosition; - private: - SensorValueType sensor; }; diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp index 013af71634177b541922df2733ad495098b435eb..d847d403fda09fcb58070bfc957b99fe776f79b6 100755 --- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp +++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp @@ -22,9 +22,13 @@ * GNU General Public License */ #include "NJointHolonomicPlatformGlobalPositionController.h" +#include "ArmarXCore/core/logging/Logging.h" +#include "RobotAPI/components/units/RobotUnit/util/ControlThreadOutputBuffer.h" #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointControllerRegistry.h> +#include <SimoxUtility/math/convert/mat3f_to_rpy.h> +#include <SimoxUtility/math/convert/mat4f_to_rpy.h> #include <SimoxUtility/math/periodic/periodic_clamp.h> #include <cmath> @@ -42,8 +46,8 @@ namespace armarx opid(cfg->p_rot, cfg->i_rot, cfg->d_rot, cfg->maxRotationVelocity, cfg->maxRotationAcceleration, true) { - const SensorValueBase* sv = useSensorValue(cfg->platformName); - this->sv = sv->asA<SensorValueHolonomicPlatform>(); + const SensorValueBase* sv = useSensorValue(GlobalRobotLocalizationSensorDevice::DeviceName()); + this->sv = sv->asA<GlobalRobotLocalizationSensorDevice::SensorValueType>(); target = useControlTarget(cfg->platformName, ControlModes::HolonomicPlatformVelocity)->asA<ControlTargetHolonomicPlatformVelocity>(); diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp index 226274e21919ac7d36616a086e7530830669f77b..80efce08aeaefed56bf599ceb928c7e1615e36a0 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp @@ -156,6 +156,11 @@ namespace armarx::RobotUnitModule ARMARX_INFO << "initializing default units"; initializeKinematicUnit(); ARMARX_DEBUG << "KinematicUnit initialized"; + + ARMARX_DEBUG << "initializing LocalizationUnit"; + initializeLocalizationUnit(); + ARMARX_DEBUG << "LocalizationUnit initialized"; + initializePlatformUnit(); ARMARX_DEBUG << "PlatformUnit initialized"; initializeForceTorqueUnit(); @@ -166,9 +171,7 @@ namespace armarx::RobotUnitModule ARMARX_DEBUG << "TrajectoryControllerUnit initialized"; initializeTcpControllerUnit(); ARMARX_DEBUG << "TcpControllerUnit initialized"; - ARMARX_DEBUG << "initializing LocalizationUnit"; - initializeLocalizationUnit(); - ARMARX_DEBUG << "LocalizationUnit initialized"; + } ARMARX_INFO << "initializing default units...done! " << (TimeUtil::GetTime(true) - beg).toMicroSeconds() << " us"; } @@ -460,6 +463,13 @@ namespace armarx::RobotUnitModule unit->globalPositionCorrectionSensorDevice = dynamic_cast<decltype(unit->globalPositionCorrectionSensorDevice)>( _module<Devices>().getSensorDevices().at(GlobalRobotPoseCorrectionSensorDevice::DeviceName()).get()); + + const SensorDevicePtr& sensorDeviceGlobalRobotLocalization = _module<Devices>().getSensorDevices().at(GlobalRobotLocalizationSensorDevice::DeviceName()); + ARMARX_CHECK_EXPRESSION(sensorDeviceGlobalRobotLocalization->getSensorValue()->asA<GlobalRobotLocalizationSensorDevice::SensorValueType>()); + + dynamic_cast<GlobalRobotLocalizationSensorDevice&>(*sensorDeviceGlobalRobotLocalization).sensorRelativePosition = sensorDeviceRelativePosition->getSensorValue()->asA<SensorValueHolonomicPlatformRelativePosition>(); + dynamic_cast<GlobalRobotLocalizationSensorDevice&>(*sensorDeviceGlobalRobotLocalization).sensorGlobalPositionCorrection = unit->globalPositionCorrectionSensorDevice->getSensorValue()->asA<SensorValueGlobalPoseCorrection>(); + //add addUnit(unit); }