diff --git a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp index f9072fedc91dcb0b42e5e7f032371dcd4292e6fc..ba9b07789f37f1094a6eda84517d1a8fabf381a5 100644 --- a/source/RobotAPI/components/RobotState/RobotStateComponent.cpp +++ b/source/RobotAPI/components/RobotState/RobotStateComponent.cpp @@ -120,7 +120,14 @@ namespace armarx } usingTopic(robotNodeSetName + "State"); - readRobotInfo(robotFile); + try + { + readRobotInfo(robotFile); + } + catch (...) + { + ARMARX_WARNING << "Failed to read robot info from file: " << robotFile; + } /*VirtualRobot::RobotNodeSetPtr pns = this->_synchronized->getRobotNodeSet("Platform"); @@ -151,7 +158,7 @@ namespace armarx std::string value = infoNode.attribute_value_or_default("value", ""); //ARMARX_IMPORTANT << "name: " << name << "; profile: " << profile << "; value: " << value; std::vector<RobotInfoNodePtr> children; - for(const RapidXmlReaderNode& childNode : infoNode.nodes()) + for (const RapidXmlReaderNode& childNode : infoNode.nodes()) { children.push_back(readRobotInfo(childNode)); } diff --git a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h index fc8b362bcd2c705f163387fa4f41884d9d92ac92..c5ca4ead4deb70d4d507186a0a16d43dfb81ac51 100644 --- a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h +++ b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h @@ -119,6 +119,7 @@ namespace armarx svi.addBaseClass<SensorValue1DoFActuatorVelocity>(); svi.addBaseClass<SensorValue1DoFActuatorAcceleration>(); svi.addBaseClass<SensorValue1DoFActuatorTorque>(); + svi.addBaseClass<SensorValue1DoFGravityTorque>(); return svi; } }; diff --git a/source/RobotAPI/libraries/core/PIDController.cpp b/source/RobotAPI/libraries/core/PIDController.cpp index e364f8d9bcdc0e688a986cec002390acf32deae0..a2ae65747f82216d6c57ea52738d7df32a340482 100644 --- a/source/RobotAPI/libraries/core/PIDController.cpp +++ b/source/RobotAPI/libraries/core/PIDController.cpp @@ -127,7 +127,7 @@ void PIDController::update(double deltaSec, double measuredValue, double targetV if (!firstRun) { integral += error * deltaSec; - + integral = math::MathUtils::LimitTo(integral, maxIntegral); if (deltaSec > 0.0) { derivative = (error - previousError) / deltaSec; diff --git a/source/RobotAPI/libraries/core/PIDController.h b/source/RobotAPI/libraries/core/PIDController.h index 8fa7fba0a9b6a8096e03b343a2cf8cd90f6e2c0a..f0409a76531fac273ca193bc3b844ab3b2926985 100644 --- a/source/RobotAPI/libraries/core/PIDController.h +++ b/source/RobotAPI/libraries/core/PIDController.h @@ -52,6 +52,7 @@ namespace armarx // protected: float Kp, Ki, Kd; double integral; + double maxIntegral = std::numeric_limits<double>::max(); double derivative; double previousError; double processValue;