diff --git a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp index e5762482e69b710fa361bf26dd5705849b4b0efb..35f54669285b085c2c14fb7929585f2bba6bc0c0 100644 --- a/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp +++ b/source/RobotAPI/components/ArticulatedObjectLocalizerExample/ArticulatedObjectLocalizerExample.cpp @@ -176,7 +176,7 @@ namespace armarx::articulated_object const float t = static_cast<float>((now - start).toSecondsDouble()); // move joints at certain frequency - const float k = (1 + std::sin(t / (M_2_PIf32))) / 2; // in [0,1] + const float k = (1 + std::sin(t / (M_2_PI))) / 2; // in [0,1] auto jointValues = articulatedObject->getJointValues(); diff --git a/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp b/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp index 61497d62d399adf6f1c89a0a0de1c544a902ec51..5d077bca27a123793f5bd34023d9a6878dab9ae6 100644 --- a/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp +++ b/source/RobotAPI/components/DynamicObstacleManager/DynamicObstacleManager.cpp @@ -260,7 +260,7 @@ namespace armarx std::shared_lock<std::shared_mutex> l{m_managed_obstacles_mutex}; const Eigen::Vector2f diff = goal - agentPosition; - const Eigen::Vector2f orthogonal_normalized = Eigen::Vector2f(Eigen::Rotation2Df(M_PI_2f32) * diff).normalized(); + const Eigen::Vector2f orthogonal_normalized = Eigen::Vector2f(Eigen::Rotation2Df(M_PI_2) * diff).normalized(); const float sample_step = 5; // in [mm], sample step size towards goal. const float distance_to_goal = diff.norm() + safetyRadius; diff --git a/source/RobotAPI/components/ObjectMemoryEditor/Editor.h b/source/RobotAPI/components/ObjectMemoryEditor/Editor.h index f1a6ebc2a168de7938e552b44f1d2144a915dd35..e94e1a7cc2aa544650681583ca6a1aae11f9bef6 100644 --- a/source/RobotAPI/components/ObjectMemoryEditor/Editor.h +++ b/source/RobotAPI/components/ObjectMemoryEditor/Editor.h @@ -86,7 +86,7 @@ namespace armarx struct Placeholder { simox::OrientedBoxf box; - Eigen::Matrix4f transform; + Eigen::Matrix4f transform{Eigen::Matrix4f::Identity()}; }; void addPlaceholder(simox::OrientedBoxf box); diff --git a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp index c9afa372dc20c08fc6e80ce2666214618d366286..c944eda90774140a09c4b2376bcfa734b000817f 100644 --- a/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp +++ b/source/RobotAPI/components/armem/addon/LegacyRobotStateMemoryAdapter/LegacyRobotStateMemoryAdapter.cpp @@ -86,7 +86,7 @@ namespace armarx::armem } // is this corect?? - prop.platform.acceleration = Eigen::Vector3f(); + prop.platform.acceleration = Eigen::Vector3f::Zero(); prop.platform.relativePosition = Eigen::Vector3f(update.platformPose.x, // this should be globasl AFAIK update.platformPose.y, update.platformPose.rotationAroundZ); diff --git a/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/CMakeLists.txt b/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/CMakeLists.txt index a87ba755cb2744ece8508856d8d80e5ac8251744..678a03c3aaaa372f5f0fd9bdd28a14e29d9c9b2d 100644 --- a/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/CMakeLists.txt +++ b/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/CMakeLists.txt @@ -15,6 +15,7 @@ armarx_add_component( VirtualRobotWriterExample.h ) + # Generate the application armarx_generate_and_add_component_executable( # If your component is not defined in ::armarx, specify its namespace here: diff --git a/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/VirtualRobotWriterExample.cpp b/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/VirtualRobotWriterExample.cpp index d2a7eff51a3aaf9155ddb8915f61aca9a26c7535..675d2dae9e79c28d5a2fe2d8ce9630963d878dc0 100644 --- a/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/VirtualRobotWriterExample.cpp +++ b/source/RobotAPI/components/armem/client/VirtualRobotWriterExample/VirtualRobotWriterExample.cpp @@ -133,7 +133,7 @@ namespace armarx::virtual_robot_writer_example const float t = float((now - start).toSecondsDouble()); // move joints at certain frequency - const float m = (1 + std::sin(t / (M_2_PIf32 * 10))) / 2; // in [0,1] + const float m = (1 + std::sin(t / (M_2_PI * 10))) / 2; // in [0,1] auto jointValues = robot->getJointValues(); for (auto& [k, v] : jointValues) diff --git a/source/RobotAPI/components/units/CMakeLists.txt b/source/RobotAPI/components/units/CMakeLists.txt index f6710bc22978c2816aa8056da5795b0a84b5578a..25bdbe36948d1fecc27c6e1e7b963652e412756f 100644 --- a/source/RobotAPI/components/units/CMakeLists.txt +++ b/source/RobotAPI/components/units/CMakeLists.txt @@ -74,6 +74,7 @@ set(LIB_FILES ) armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}") +target_compile_options("${LIB_NAME}" PRIVATE -Wno-error=array-bounds) add_subdirectory(ObstacleAvoidingPlatformUnit) add_subdirectory(ObstacleAwarePlatformUnit) diff --git a/source/RobotAPI/components/units/ObstacleAvoidingPlatformUnit/ObstacleAvoidingPlatformUnit.cpp b/source/RobotAPI/components/units/ObstacleAvoidingPlatformUnit/ObstacleAvoidingPlatformUnit.cpp index 14f1348ce043e1fb9158d9d2eca4268b15c17d1c..3166408f4190460632625b1739066112fd1d2965 100644 --- a/source/RobotAPI/components/units/ObstacleAvoidingPlatformUnit/ObstacleAvoidingPlatformUnit.cpp +++ b/source/RobotAPI/components/units/ObstacleAvoidingPlatformUnit/ObstacleAvoidingPlatformUnit.cpp @@ -586,7 +586,7 @@ bool armarx::ObstacleAvoidingPlatformUnit::is_near_target(const Eigen::Vector2f& const float sim = simox::math::cosine_similarity(target_direction, control_direction); // if almost pointing into same direction - if (sim > cos(M_PI_4f32)) + if (sim > cos(M_PI_4)) { return true; } diff --git a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp index fc0274a7eb932135018cf356ca39105ea70890c6..d18722607d92879c22184fd8afc06a5ed0fa9bb9 100644 --- a/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp +++ b/source/RobotAPI/components/units/ObstacleAwarePlatformUnit/ObstacleAwarePlatformUnit.cpp @@ -564,7 +564,7 @@ const noexcept const float sim = simox::math::cosine_similarity(target_direction, control_direction); // if almost pointing into same direction - if (sim > cos(M_PI_4f32)) + if (sim > cos(M_PI_4)) { return true; } diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp index 15baf198eb03202a929341675f01ef1ab831d234..67e940d30ad6899cc9773c14c950f8207092f905 100644 --- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp +++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointCartesianNaturalPositionController.cpp @@ -269,7 +269,7 @@ namespace armarx { ft.force = _rtFTfake.force; ft.torque = _rtFTfake.torque; - ARMARX_RT_LOGF("Using fake ft values"); + ARMARX_RT_LOGF_VERBOSE("Using fake ft values"); } _rtFTHistory.at(_rtFTHistoryIndex) = ft; diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp index 8ce9b397c9147d041290f5f8f73c203d6b8cb326..2956bbcf81a23ed99c16ac0ee8dc7ab5b697ace0 100755 --- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp +++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.cpp @@ -159,7 +159,7 @@ namespace armarx getWriterControlStruct().target << x, y; getWriterControlStruct().targetOrientation = - simox::math::periodic_clamp(yaw, -M_PIf32, M_PIf32); + simox::math::periodic_clamp(static_cast<double>(yaw), -M_PI, M_PI); getWriterControlStruct().translationAccuracy = translationAccuracy; getWriterControlStruct().rotationAccuracy = rotationAccuracy; diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h index 4e07bdb3e790f36875e2b080b1a1470b461eaa8b..f59f1b7bef8c52d860490b75f1dc8e2f9eb6462e 100755 --- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h +++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformGlobalPositionController.h @@ -66,8 +66,8 @@ namespace armarx struct NJointHolonomicPlatformGlobalPositionControllerTarget { - Eigen::Vector2f target; // x,y - float targetOrientation; + Eigen::Vector2f target{0, 0}; // x,y + float targetOrientation = 0; float translationAccuracy = 0.0f; float rotationAccuracy = 0.0f; bool newTargetSet = false; diff --git a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h index ad5b035266524a4079f84811ad8677279019f856..62760e241a7b2a4c7b4457fa6669545d040dff63 100644 --- a/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h +++ b/source/RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformRelativePositionController.h @@ -60,8 +60,8 @@ namespace armarx struct NJointHolonomicPlatformRelativePositionControllerTarget { - Eigen::Vector2f target; // x,y - float targetOrientation; + Eigen::Vector2f target{0, 0}; // x,y + float targetOrientation = 0; float translationAccuracy = 0.0f; float rotationAccuracy = 0.0f; bool newTargetSet = false; @@ -105,7 +105,7 @@ namespace armarx MultiDimPIDController pid; PositionThroughVelocityControllerWithAccelerationBoundsAndPeriodicPosition oriCtrl; ControlTargetHolonomicPlatformVelocity* target; - Eigen::Vector2f startPosition, currentPosition; + Eigen::Vector2f startPosition{0, 0}, currentPosition{0, 0}; float startOrientation; float currentOrientation; // float rad2MMFactor; diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp index bd92c93f31a9007c338b9ae4bcd52d9ebe1c4d50..16af4f8c064391718d3aef43efac649030d41ed8 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp @@ -289,9 +289,10 @@ namespace armarx::RobotUnitModule //try to find the correct mode (maybe the specified target was derived! //this only works, if exactly one controller provides this mode const JointController* selected_ctrl{nullptr}; - for (const auto ctrl : controlDevice->getJointControllers()) + auto jointControllers = controlDevice->getJointControllers(); + for (const auto* jointController : jointControllers) { - if (ctrl->getControlTarget()->isA<CtargT>()) + if (jointController->getControlTarget()->isA<CtargT>()) { if (selected_ctrl) { @@ -300,7 +301,7 @@ namespace armarx::RobotUnitModule << requestedControlMode << "! autoselection failed"; break; } - selected_ctrl = ctrl; + selected_ctrl = jointController; } } if (selected_ctrl) diff --git a/source/RobotAPI/components/units/RobotUnit/util/ControlThreadOutputBuffer.h b/source/RobotAPI/components/units/RobotUnit/util/ControlThreadOutputBuffer.h index e71cc9309d80f65ab74480c7837d1095022821f7..cb47d82b18e8c30d5b0f82c7923ae8f2328bf734 100644 --- a/source/RobotAPI/components/units/RobotUnit/util/ControlThreadOutputBuffer.h +++ b/source/RobotAPI/components/units/RobotUnit/util/ControlThreadOutputBuffer.h @@ -24,6 +24,7 @@ #include <vector> +#include <ArmarXCore/core/logging/LoggingUtil.h> // THIS NEEDS TO BE INCLUDED BEFORE EXPRESSION EXCEPTION #include <ArmarXCore/core/exceptions/local/ExpressionException.h> #include <ArmarXCore/core/util/PropagateConst.h> #include <ArmarXCore/core/util/StringHelperTemplates.h> diff --git a/source/RobotAPI/components/units/SensorActorUnit.cpp b/source/RobotAPI/components/units/SensorActorUnit.cpp index f93f684d72619a4ad402f8f56a5f6c285d00a866..45efd98c586e5bfa15086ddc08a80d65f7c3497a 100644 --- a/source/RobotAPI/components/units/SensorActorUnit.cpp +++ b/source/RobotAPI/components/units/SensorActorUnit.cpp @@ -160,6 +160,8 @@ void SensorActorUnit::release(const Ice::Current& c) void SensorActorUnit::onExitComponent() { - unitMutex.try_lock(); // try to lock, to ensure that it is locked on unlock call - unitMutex.unlock(); + if (unitMutex.try_lock()) // try to lock, to ensure that it is locked on unlock call + { + unitMutex.unlock(); + } } diff --git a/source/RobotAPI/libraries/PriorKnowledge/core/FinderBase.h b/source/RobotAPI/libraries/PriorKnowledge/core/FinderBase.h index a0ad9297f873496e7dbe0d1c17fb3ab0b5904ac1..57528416490797728886eb08a0ff7999bb4e4887 100644 --- a/source/RobotAPI/libraries/PriorKnowledge/core/FinderBase.h +++ b/source/RobotAPI/libraries/PriorKnowledge/core/FinderBase.h @@ -138,5 +138,11 @@ namespace armarx::priorknowledge::core virtual std::optional<FinderInfoType> find(const DatasetType& dataset, const IDType& id) const = 0; virtual std::vector<FinderInfoType> findAll(const DatasetType& dataset) const = 0; + + // Fix hidden virtual functions + using Base::checkAll; + using Base::check; + using Base::find; + using Base::findAll; }; } // namespace armarx::priorknowledge::core diff --git a/source/RobotAPI/libraries/SimpleTrajectory/CMakeLists.txt b/source/RobotAPI/libraries/SimpleTrajectory/CMakeLists.txt index 5e24563b59a6d4d470916e244a451a6878d07436..545faddd872d9ac16863b9471c6c876b5b705045 100644 --- a/source/RobotAPI/libraries/SimpleTrajectory/CMakeLists.txt +++ b/source/RobotAPI/libraries/SimpleTrajectory/CMakeLists.txt @@ -27,5 +27,7 @@ set(LIB_HEADERS armarx_add_library("${LIB_NAME}" "${LIB_FILES}" "${LIB_HEADERS}" "${LIBS}") +target_compile_options("${LIB_NAME}" PRIVATE -Wno-error=maybe-uninitialized) + # add unit tests add_subdirectory(test) diff --git a/source/RobotAPI/libraries/armem/util/util.h b/source/RobotAPI/libraries/armem/util/util.h index 2f45b843a0419a639e000cc2594b59783df06267..050df3f880d715e44f2e07f37e06bf9b6708d760 100644 --- a/source/RobotAPI/libraries/armem/util/util.h +++ b/source/RobotAPI/libraries/armem/util/util.h @@ -88,18 +88,15 @@ namespace armarx::armem // loop over all entities and their snapshots for (const auto &[s, entity] : entities) { - for (const auto &[ss, entitySnapshot] : entity.history()) + entity.forEachInstance([&outV](const wm::EntityInstance& entityInstance) { - for (const auto& entityInstance : entitySnapshot.instances()) - { - const auto o = tryCast<AronClass>(entityInstance); + const auto o = tryCast<AronClass>(entityInstance); - if (o) - { - outV.push_back(*o); - } + if (o) + { + outV.push_back(*o); } - } + }); } return outV; @@ -139,25 +136,15 @@ namespace armarx::armem // loop over all entities and their snapshots for (const auto &[s, entity] : entities) { - if (entity.history().empty()) + entity.forEachInstance([&outV, &pred](const wm::EntityInstance& entityInstance) { - ARMARX_WARNING << "Empty history for " << s; - } - - ARMARX_DEBUG << "History size: " << entity.history().size(); + const auto o = tryCast<AronClass>(entityInstance); - for (const auto &[ss, entitySnapshot] : entity.history()) - { - for (const auto& entityInstance : entitySnapshot.instances()) + if (o) { - const auto o = tryCast<AronClass>(entityInstance); - - if (o) - { - outV.push_back(pred(*o)); - } + outV.push_back(pred(*o)); } - } + }); } return outV; diff --git a/source/RobotAPI/libraries/armem_robot/types.h b/source/RobotAPI/libraries/armem_robot/types.h index 9caf84f24574be547036e94fc0f07e50680d0fec..f497c3e2ddcbec47b26585202f3f97d0dedbf957 100644 --- a/source/RobotAPI/libraries/armem_robot/types.h +++ b/source/RobotAPI/libraries/armem_robot/types.h @@ -25,8 +25,8 @@ namespace armarx::armem::robot struct Twist { - Eigen::Vector3f linear; - Eigen::Vector3f angular; + Eigen::Vector3f linear{Eigen::Vector3f::Zero()}; + Eigen::Vector3f angular{Eigen::Vector3f::Zero()}; }; struct PlatformState diff --git a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h index 29a009714506d069ebd05dcbc988acc64eafe1de..0bae7b6e9d12bf287307ec5f774bc95389ca216c 100644 --- a/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h +++ b/source/RobotAPI/libraries/armem_robot_state/client/common/VirtualRobotWriter.h @@ -54,6 +54,8 @@ namespace armarx::armem::robot_state [[nodiscard]] bool storeState(const VirtualRobot::Robot& robot, const armem::Time& timestamp); + using RobotWriter::storeState; + using RobotWriter::storeDescription; }; } // namespace armarx::armem::robot_state diff --git a/source/RobotAPI/libraries/armem_system_state/server/LightweightSystemMonitor/linux_process_load.hpp b/source/RobotAPI/libraries/armem_system_state/server/LightweightSystemMonitor/linux_process_load.hpp index 7d86ee5491dc5e0999e56a4089b3b468061e0909..ab76f86ff23c9b47c402bc7797c7a6d72b99a640 100644 --- a/source/RobotAPI/libraries/armem_system_state/server/LightweightSystemMonitor/linux_process_load.hpp +++ b/source/RobotAPI/libraries/armem_system_state/server/LightweightSystemMonitor/linux_process_load.hpp @@ -9,11 +9,11 @@ #pragma once - -#include <tuple> +#include <cstdint> #include <map> -#include <unordered_map> #include <string> +#include <tuple> +#include <unordered_map> class linuxProcessLoad { diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp index 6ace1783e7b6cedbd7dc8312bb3c38265450c216..404373a0a4b1c64778d597c15304ba8f30c62d49 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.cpp @@ -69,19 +69,19 @@ namespace armarx::aron::codegenerator::cpp::generator std::pair<std::vector<std::pair<std::string, std::string>>, bool> Matrix::getCtorInitializers(const std::string& name) const { - if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT) + if (type.getCols() == -1 || type.getRows() == -1) { return {{}, false}; } - if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY) + else if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY) { return {{{name, getInstantiatedCppTypename() + "::Identity()"}}, true}; } - if (type.getDefaultValue() == aron::type::matrix::default_value::ZEROS) + else if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS) { return {{{name, getInstantiatedCppTypename() + "::Zero()"}}, true}; } - if (type.getDefaultValue() == aron::type::matrix::default_value::ONES) + else if (type.getDefaultValue() == aron::type::matrix::default_value::ONES) { return {{{name, getInstantiatedCppTypename() + "::One()"}}, true}; } @@ -93,6 +93,36 @@ namespace armarx::aron::codegenerator::cpp::generator } } + CppBlockPtr + Matrix::getResetHardBlock(const std::string& cppAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + + if (type.getCols() == -1 || type.getRows() == -1) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "();"); + } + + else if (type.getDefaultValue() == aron::type::matrix::default_value::IDENTITY) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Identity();"); + } + else if (type.getDefaultValue() == aron::type::matrix::default_value::DEFAULT || type.getDefaultValue() == aron::type::matrix::default_value::ZEROS) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Zero();"); + } + else if (type.getDefaultValue() == aron::type::matrix::default_value::ONES) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::One();"); + } + else if (not type.getDefaultValue().empty()) + { + // try to parse num. We ensure from typereader that defaultValue is valid number + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::One() * " + type.getDefaultValue() + ";"); + } + return resolveMaybeResetHardBlock(block_if_data, cppAccessor); + } + CppBlockPtr Matrix::getResetSoftBlock(const std::string& cppAccessor) const { diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h index 452ac7b53e5e9d996bc8cbc7ffa41555d7275e65..69790642abf5681ec78b9aa25a6fc3eac9163a0d 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Matrix.h @@ -42,6 +42,7 @@ namespace armarx::aron::codegenerator::cpp::generator std::vector<std::string> getRequiredIncludes() const final; std::pair<std::vector<std::pair<std::string, std::string>>, bool> getCtorInitializers(const std::string&) const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp index 365b3c8824d6c38b60ccde7c4381aa41bb0945b7..b4d7c92cca8521e945eb6e35d1b819c53b154ac6 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.cpp @@ -62,13 +62,13 @@ namespace armarx::aron::codegenerator::cpp::generator { if (type.getDefaultValue() == aron::type::quaternion::default_value::DEFAULT) { - return {{}, false}; + return {{{name, getInstantiatedCppTypename() + "::Identity()"}}, true}; } - if (type.getDefaultValue() == aron::type::quaternion::default_value::ZEROS) + else if (type.getDefaultValue() == aron::type::quaternion::default_value::ZEROS) { return {{{name, getInstantiatedCppTypename() + "(0, 0, 0, 0)"}}, true}; } - if (type.getDefaultValue() == aron::type::quaternion::default_value::ONES) + else if (type.getDefaultValue() == aron::type::quaternion::default_value::ONES) { return {{{name, getInstantiatedCppTypename() + "(1, 1, 1, 1)"}}, true}; } @@ -80,6 +80,31 @@ namespace armarx::aron::codegenerator::cpp::generator } } + CppBlockPtr + Quaternion::getResetHardBlock(const std::string& cppAccessor) const + { + CppBlockPtr block_if_data = std::make_shared<CppBlock>(); + + if (type.getDefaultValue() == aron::type::quaternion::default_value::DEFAULT) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "::Identity();"); + } + else if (type.getDefaultValue() == aron::type::quaternion::default_value::ZEROS) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "(0, 0, 0, 0);"); + } + else if (type.getDefaultValue() == aron::type::quaternion::default_value::ONES) + { + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "(1, 1, 1, 1);"); + } + else if (not type.getDefaultValue().empty()) + { + // try to parse num. We ensure from typereader that defaultValue is valid number + block_if_data->addLine(cppAccessor + " = " + getInstantiatedCppTypename() + "(" + type.getDefaultValue() + ");"); + } + return resolveMaybeResetHardBlock(block_if_data, cppAccessor); + } + CppBlockPtr Quaternion::getResetSoftBlock(const std::string& cppAccessor) const { diff --git a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h index 4fd41b7dbd382c0231337ea30ba661f9b1e9eab3..70f8e890e8ed9f38ed75074fab8d7113dcec1d97 100644 --- a/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h +++ b/source/RobotAPI/libraries/aron/codegeneration/codegenerator/codewriter/cpp/generator/ndarray/Quaternion.h @@ -42,6 +42,7 @@ namespace armarx::aron::codegenerator::cpp::generator std::vector<std::string> getRequiredIncludes() const final; std::pair<std::vector<std::pair<std::string, std::string>>, bool> getCtorInitializers(const std::string&) const final; + CppBlockPtr getResetHardBlock(const std::string& cppAccessor) const final; CppBlockPtr getResetSoftBlock(const std::string& cppAccessor) const final; CppBlockPtr getWriteTypeBlock(const std::string& typeAccessor, const std::string& cppAccessor, diff --git a/source/RobotAPI/libraries/ukfm/CMakeLists.txt b/source/RobotAPI/libraries/ukfm/CMakeLists.txt index 798d6767bec35847f7f86e3cd64a5db5083ed230..08ef9a9c8344ef4c5346293b910f4a26a9883c06 100644 --- a/source/RobotAPI/libraries/ukfm/CMakeLists.txt +++ b/source/RobotAPI/libraries/ukfm/CMakeLists.txt @@ -34,6 +34,8 @@ armarx_add_library( "${LIBS}" ) +target_compile_options("${LIB_NAME}" PRIVATE -Wno-error=array-bounds) + if(Eigen3_FOUND) target_include_directories("${LIB_NAME}" SYSTEM PUBLIC ${Eigen3_INCLUDE_DIR} ${Eigen3_INCLUDE_DIRS}) endif() @@ -41,3 +43,4 @@ endif() if(manif_FOUND) target_include_directories("${LIB_NAME}" SYSTEM PUBLIC ${manif_INCLUDE_DIR} ${manif_INCLUDE_DIRS}) endif() + diff --git a/source/RobotAPI/statecharts/ForceTorqueUtility/DetectForceSpike.cpp b/source/RobotAPI/statecharts/ForceTorqueUtility/DetectForceSpike.cpp index 6be767cbd80f870ff1ba98fef2546fc29215a997..e21c2c1785fb690f1b26d7e8a9c52e9aafc558ac 100644 --- a/source/RobotAPI/statecharts/ForceTorqueUtility/DetectForceSpike.cpp +++ b/source/RobotAPI/statecharts/ForceTorqueUtility/DetectForceSpike.cpp @@ -46,7 +46,7 @@ void DetectForceSpike::run() DatafieldRefPtr forceDf = DatafieldRefPtr::dynamicCast(getForceTorqueObserver()->getForceDatafield(in.getFTDatafieldName())); const Eigen::Vector3f weights = in.getForceWeights()->toEigen(); const Eigen::Vector3f axis = in.getAxis()->toEigen().normalized(); - auto getForceAlongAxis = [&] + auto getForceAlongAxis = [&]() -> float { return forceDf->getDataField()->get<FramedDirection>()->toEigen().cwiseProduct(weights).transpose() * axis; };