From f9f4e7981983b8d6ac5f76f8435c093dc5b4c69f Mon Sep 17 00:00:00 2001 From: armar-user <armar6@kit.edu> Date: Thu, 14 Jul 2022 16:39:23 +0200 Subject: [PATCH] fix: global_T_robot sensor --- .../Devices/GlobalRobotPoseSensorDevice.cpp | 4 ++++ .../Devices/GlobalRobotPoseSensorDevice.h | 11 +++++------ ...HolonomicPlatformGlobalPositionController.cpp | 8 ++++++-- .../RobotUnitModules/RobotUnitModuleUnits.cpp | 16 +++++++++++++--- 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.cpp b/source/RobotAPI/components/units/RobotUnit/Devices/GlobalRobotPoseSensorDevice.cpp index f248ce502..57f7cf102 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 d60e8c887..c3cd19f4a 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 013af7163..d847d403f 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 226274e21..80efce08a 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); } -- GitLab