diff --git a/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt b/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt index c3c396371257f7800661cfb5a8ac2ffc7b7a91d8..1daa8bc0f41b165f13c3084fbc7bcf3d6f4f2d15 100755 --- a/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt +++ b/source/RobotAPI/components/units/RobotUnit/CMakeLists.txt @@ -104,6 +104,7 @@ set(LIB_HEADERS SensorValues/SensorValueBase.h SensorValues/SensorValue1DoFActuator.h SensorValues/SensorValueIMU.h + SensorValues/SensorValueBattery.h SensorValues/SensorValueForceTorque.h SensorValues/SensorValueHolonomicPlatform.h SensorValues/SensorValueRTThreadTimings.h diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp index 42935c414d4531ad8ba2b062dcee420df4212979..09f52252953d5e9d5a1ebfdac591a68745f46137 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp @@ -31,6 +31,7 @@ #include <RobotAPI/components/units/RobotUnit/NJointControllers/NJointHolonomicPlatformVelocityControllerWithRamp.h> #include <RobotAPI/components/units/RobotUnit/RobotUnit.h> #include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValue1DoFActuator.h> +#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBattery.h> #include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValueHolonomicPlatform.h> #include <RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.h> #include <RobotAPI/components/units/RobotUnit/Units/ForceTorqueSubUnit.h> @@ -276,26 +277,20 @@ namespace armarx::RobotUnitModule for (auto i : getIndices(_module<Devices>().getSensorDevices().keys())) { const SensorDevicePtr& sensorDevice = _module<Devices>().getSensorDevices().at(i); - if (sensorDevice->getSensorValue()->isA<SensorValueIMU>()) + if (sensorDevice->getSensorValue()->isA<SensorValueBattery>()) { batteryDevs[sensorDevice->getDeviceName()] = i; } } - // Add it. const std::string configName = getProperty<std::string>("DiagnosticsUnitName"); const std::string confPre = getConfigDomain() + "." + configName + "."; Ice::PropertiesPtr properties = getIceProperties()->clone(); - //properties->setProperty(confPre + "MinimumLoggingLevel", getProperty<std::string>("MinimumLoggingLevel").getValue()); - // Fill properties. - properties->setProperty(confPre + "IMUTopicName", - getProperty<std::string>("IMUTopicName").getValue()); + // Create and add unit. IceInternal::Handle<UnitT> unit = Component::create<UnitT>(properties, configName, getConfigDomain()); unit->setBatteryManagementDevices(batteryDevs); - - // Add. addUnit(std::move(unit)); } diff --git a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBattery.h b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBattery.h new file mode 100644 index 0000000000000000000000000000000000000000..7cf7c431850b4051ae2900d33030e0e1511d34fd --- /dev/null +++ b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBattery.h @@ -0,0 +1,54 @@ +#pragma once + +#include <string> + +#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBase.h> + +namespace armarx +{ + + enum class BatteryState : std::uint8_t + { + discharging = 1, + charging = 2, + unavailable = 3 + }; + + class SensorValueBattery : virtual public SensorValueBase + { + public: + DETAIL_SensorValueBase_DEFAULT_METHOD_IMPLEMENTATION + + std::uint8_t state; + float designEnergy_J; + float fullChargeEnergy_J; + float energy_J; + float energyFromFullCharge_pct; + float temperature_degC; + float ratedVoltage_V; + float voltage_V; + float current_A; + float power_W; + bool hasError; + + static SensorValueInfo<SensorValueBattery> + GetClassMemberInfo() + { + SensorValueInfo<SensorValueBattery> svi; + svi.addMemberVariable(&SensorValueBattery::state, "state"); + svi.addMemberVariable(&SensorValueBattery::designEnergy_J, "designEnergy_J"); + svi.addMemberVariable(&SensorValueBattery::fullChargeEnergy_J, "fullChargeEnergy_J"); + svi.addMemberVariable(&SensorValueBattery::energy_J, "energy_J"); + svi.addMemberVariable(&SensorValueBattery::energyFromFullCharge_pct, + "energyFromFullCharge_pct"); + svi.addMemberVariable(&SensorValueBattery::temperature_degC, "temperature_degC"); + svi.addMemberVariable(&SensorValueBattery::ratedVoltage_V, "ratedVoltage_V"); + svi.addMemberVariable(&SensorValueBattery::voltage_V, "voltage_V"); + svi.addMemberVariable(&SensorValueBattery::current_A, "current_A"); + svi.addMemberVariable(&SensorValueBattery::power_W, "power_W"); + svi.addMemberVariable(&SensorValueBattery::hasError, "hasError"); + return svi; + } + }; + +} // namespace armarx diff --git a/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.cpp b/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.cpp index 766ebda65025c7dd4810ae42fc3b51b55e24154d..2d7391460f272dc80493368aa6ae920d94ee83c5 100644 --- a/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.cpp +++ b/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.cpp @@ -3,7 +3,7 @@ namespace armarx { - BatteryStatus + dto::BatteryStatus DiagnosticsSubUnit::getBatteryStatus(const Ice::Current& current) const { static std::string accumulated = "accumulated"; @@ -12,7 +12,7 @@ namespace armarx if (_batteryManagementDevices.size() == 0) { return {.name = accumulated, - .state = BatteryState::unavailable, + .state = dto::BatteryState::unavailable, .designEnergy_J = -1, .fullChargeEnergy_J = -1, .energy_J = -1, @@ -26,19 +26,19 @@ namespace armarx .error = ""}; } - BatteryStatus bs{.name = accumulated, - .state = BatteryState::discharging, - .designEnergy_J = -1, - .fullChargeEnergy_J = -1, - .energy_J = -1, - .energyFromFullCharge_pct = 66.7, - .temperature_degC = -1, - .ratedVoltage_V = -1, - .voltage_V = -1, - .current_A = -1, - .power_W = -1, - .hasError = false, - .error = ""}; + dto::BatteryStatus bs{.name = accumulated, + .state = dto::BatteryState::discharging, + .designEnergy_J = -1, + .fullChargeEnergy_J = -1, + .energy_J = -1, + .energyFromFullCharge_pct = 66.7, + .temperature_degC = -1, + .ratedVoltage_V = -1, + .voltage_V = -1, + .current_A = -1, + .power_W = -1, + .hasError = false, + .error = ""}; return bs; } diff --git a/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.h b/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.h index 1ab001ceb71500a96e3ae3350467b18ebf30ee20..dd2ff7834b297206cf4a00cfea95693e76fdb3fd 100644 --- a/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.h +++ b/source/RobotAPI/components/units/RobotUnit/Units/DiagnosticsSubUnit.h @@ -3,7 +3,7 @@ #include <ArmarXCore/core/Component.h> #include <RobotAPI/components/units/ForceTorqueUnit.h> -#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValueForceTorque.h> +#include <RobotAPI/components/units/RobotUnit/SensorValues/SensorValueBattery.h> #include <RobotAPI/components/units/RobotUnit/Units/RobotUnitSubUnit.h> #include <RobotAPI/interface/units/DiagnosticsUnitInterface.h> #include <RobotAPI/interface/units/LocalizationUnitInterface.h> @@ -17,7 +17,7 @@ namespace armarx virtual public Component { public: - BatteryStatus getBatteryStatus(const Ice::Current& current) const override; + dto::BatteryStatus getBatteryStatus(const Ice::Current& current) const override; std::string getDefaultName() const override; diff --git a/source/RobotAPI/libraries/core/RobotPool.cpp b/source/RobotAPI/libraries/core/RobotPool.cpp index 2b9444a4d594a6483c435638fad3385f9b544f57..0b6d58afe038069766bcd96751fcccadfd7056ec 100644 --- a/source/RobotAPI/libraries/core/RobotPool.cpp +++ b/source/RobotAPI/libraries/core/RobotPool.cpp @@ -51,10 +51,12 @@ namespace armarx return r; } } + + ARMARX_INFO << "Cloning robot"; auto newRobot = baseRobot->clone(baseRobot->getName(), VirtualRobot::CollisionCheckerPtr(new VirtualRobot::CollisionChecker())); newRobot->inflateCollisionModel(inflation); ARMARX_CHECK_EQUAL(newRobot.use_count(), 1); - ARMARX_DEBUG << "created new robot clone n with inflation " << inflation; + ARMARX_INFO << "created new robot clone n with inflation " << inflation; robots[inflation].push_back(newRobot); return newRobot; }