diff --git a/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/LocationLoader.cpp b/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/LocationLoader.cpp index cfeb43db57231ff85188667c60773c6d0e30390c..9a667a933b40e6da8f24810862a79dd934205e6c 100644 --- a/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/LocationLoader.cpp +++ b/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/LocationLoader.cpp @@ -6,6 +6,8 @@ #include <ArmarXCore/core/exceptions/local/ExpressionException.h> #include <ArmarXCore/core/logging/Logging.h> +#include <RobotAPI/libraries/core/json_conversions.h> + namespace armarx::priorknowledge::util { FramedLocationPtr @@ -53,8 +55,18 @@ namespace armarx::priorknowledge::util pose, framedPose.at("pose").get<std::vector<std::vector<float>>>()); // load the 4x4 matrix - FramedLocationPtr loc(new FramedLocation( - LocationId(source, locationName), LocationType::FRAMED_LOCATION, frame, agent, pose)); + std::optional<Names> names; + if (auto it = j.find("names"); it != j.end()) + { + it->get_to(names.emplace()); + } + + FramedLocationPtr loc(new FramedLocation(LocationId(source, locationName), + LocationType::FRAMED_LOCATION, + frame, + agent, + pose, + names)); return loc; } @@ -111,12 +123,19 @@ namespace armarx::priorknowledge::util extents, framedOrientedBox.at("extents").get<std::vector<float>>()); // load the 4x4 matrix + std::optional<Names> names; + if (auto it = j.find("names"); it != j.end()) + { + it->get_to(names.emplace()); + } + FramedBoxedLocationPtr loc(new FramedBoxedLocation(LocationId(source, locationName), LocationType::FRAMED_BOXED_LOCATION, frame, agent, pose, - extents)); + extents, + names)); return loc; } @@ -133,7 +152,7 @@ namespace armarx::priorknowledge::util } for (const auto& [locationName, j] : - js["locations"].get<std::map<std::string, nlohmann::json>>()) + js.at("locations").get<std::map<std::string, nlohmann::json>>()) { if (j.find("framedPose") != j.end()) { diff --git a/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/datatypes/Location.h b/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/datatypes/Location.h index 2a1eccb4cbe72f30ac0da1582c294eb6508ef0f2..f4a05204d706c1598751b34459c7cbdae1a5ca91 100644 --- a/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/datatypes/Location.h +++ b/source/RobotAPI/libraries/PriorKnowledge/util/LocationLoader/datatypes/Location.h @@ -1,11 +1,13 @@ #pragma once #include <memory> +#include <optional> #include <string> #include <SimoxUtility/shapes/OrientedBox.h> #include <RobotAPI/libraries/core/FramedPose.h> +#include <RobotAPI/libraries/core/Names.h> namespace armarx::priorknowledge::util { @@ -31,8 +33,12 @@ namespace armarx::priorknowledge::util { LocationId id; LocationType type; + std::optional<Names> names; - Location(const LocationId& i, const LocationType t) : id(i), type(t) + Location(const LocationId& i, + const LocationType t, + const std::optional<Names>& names = std::nullopt) : + id(i), type(t), names(names) { } @@ -45,12 +51,13 @@ namespace armarx::priorknowledge::util std::string agent; Eigen::Matrix4f pose; - FramedLocation(const LocationId& i, - const LocationType t, - const std::string& f, - const std::string& a, - const Eigen::Matrix4f& p) : - Location(i, t), frame(f), agent(a), pose(p) + FramedLocation(const LocationId& id, + const LocationType type, + const std::string& frame, + const std::string& agent, + const Eigen::Matrix4f& pose, + const std::optional<Names>& names = std::nullopt) : + Location(id, type, names), frame(frame), agent(agent), pose(pose) { } @@ -63,13 +70,14 @@ namespace armarx::priorknowledge::util { Eigen::Vector3f extents; - FramedBoxedLocation(const LocationId& i, - const LocationType t, - const std::string& f, - const std::string& a, - const Eigen::Matrix4f& p, - const Eigen::Vector3f& e) : - FramedLocation(i, t, f, a, p), extents(e) + FramedBoxedLocation(const LocationId& id, + const LocationType type, + const std::string& frame, + const std::string& agent, + const Eigen::Matrix4f& pose, + const Eigen::Vector3f& extents, + const std::optional<Names>& names = std::nullopt) : + FramedLocation(id, type, frame, agent, pose, names), extents(extents) { } diff --git a/source/RobotAPI/libraries/armem_locations/aron/Location.xml b/source/RobotAPI/libraries/armem_locations/aron/Location.xml index d53f51c2c8f75bacae2868ae9bc155aad717379e..6b5bebc692a9898e63f508ae07939afd02085e22 100644 --- a/source/RobotAPI/libraries/armem_locations/aron/Location.xml +++ b/source/RobotAPI/libraries/armem_locations/aron/Location.xml @@ -1,14 +1,27 @@ <?xml version="1.0" encoding="UTF-8" ?> <AronTypeDefinition> + <AronIncludes> + <Include include="RobotAPI/libraries/aron/common/aron/Names.xml" /> + </AronIncludes> <GenerateTypes> + <!-- + ToDo: Model regions. Ideas: + - Polygon (convex, non-convex) + - + --> + <Object name='armarx::navigation::location::arondto::Location'> <ObjectChild key='framedPose'> <FramedPose /> </ObjectChild> + <ObjectChild key='names'> + <armarx::arondto::Names optional="true" /> + </ObjectChild> + </Object> </GenerateTypes> diff --git a/source/RobotAPI/libraries/aron/common/CMakeLists.txt b/source/RobotAPI/libraries/aron/common/CMakeLists.txt index 36cbeb1f837f96ea05b131a843654481b5195bb9..011f3d196f33eb1caba3640c6dce3688bb3b7483 100644 --- a/source/RobotAPI/libraries/aron/common/CMakeLists.txt +++ b/source/RobotAPI/libraries/aron/common/CMakeLists.txt @@ -18,14 +18,15 @@ armarx_add_library( forward_declarations.h json_conversions.h + aron_conversions/armarx.h aron_conversions/core.h - aron_conversions/stl.h - aron_conversions/packagepath.h + aron_conversions/eigen.h aron_conversions/framed.h - aron_conversions/time.h - aron_conversions/armarx.h + aron_conversions/names.h + aron_conversions/packagepath.h aron_conversions/simox.h - aron_conversions/eigen.h + aron_conversions/stl.h + aron_conversions/time.h json_conversions/armarx.h json_conversions/framed.h @@ -37,15 +38,15 @@ armarx_add_library( util/object_finders.h SOURCES - + aron_conversions/armarx.cpp aron_conversions/core.cpp - aron_conversions/stl.cpp - aron_conversions/packagepath.cpp + aron_conversions/eigen.cpp aron_conversions/framed.cpp - aron_conversions/time.cpp - aron_conversions/armarx.cpp + aron_conversions/names.cpp + aron_conversions/packagepath.cpp aron_conversions/simox.cpp - aron_conversions/eigen.cpp + aron_conversions/stl.cpp + aron_conversions/time.cpp json_conversions/armarx.cpp json_conversions/framed.cpp diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions.h b/source/RobotAPI/libraries/aron/common/aron_conversions.h index 95177ce57e2b6ab67e0e0e5e4f761646d2775302..c753c3c964ec032276b7a0492cf380ad356329fb 100644 --- a/source/RobotAPI/libraries/aron/common/aron_conversions.h +++ b/source/RobotAPI/libraries/aron/common/aron_conversions.h @@ -1,6 +1,11 @@ #pragma once +#include <RobotAPI/libraries/aron/common/aron_conversions/armarx.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/eigen.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/framed.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/names.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/packagepath.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/simox.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/stl.h> +#include <RobotAPI/libraries/aron/common/aron_conversions/time.h> #include <RobotAPI/libraries/aron/core/aron_conversions.h> -#include "aron_conversions/armarx.h" -#include "aron_conversions/simox.h" -#include "aron_conversions/eigen.h" diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/names.cpp b/source/RobotAPI/libraries/aron/common/aron_conversions/names.cpp new file mode 100644 index 0000000000000000000000000000000000000000..0871f1f68a89bea5142f7d17634068e9ac02026d --- /dev/null +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/names.cpp @@ -0,0 +1,18 @@ +#include "names.h" + +#include <RobotAPI/libraries/aron/common/aron/Names.aron.generated.h> +#include <RobotAPI/libraries/core/Names.h> + +void +armarx::fromAron(const arondto::Names& dto, Names& bo) +{ + bo.recognized = dto.recognized; + bo.spoken = dto.spoken; +} + +void +armarx::toAron(arondto::Names& dto, const Names& bo) +{ + dto.recognized = bo.recognized; + dto.spoken = bo.spoken; +} diff --git a/source/RobotAPI/libraries/aron/common/aron_conversions/names.h b/source/RobotAPI/libraries/aron/common/aron_conversions/names.h new file mode 100644 index 0000000000000000000000000000000000000000..237e2b20c1e076d55270cd08b756303dfb49d374 --- /dev/null +++ b/source/RobotAPI/libraries/aron/common/aron_conversions/names.h @@ -0,0 +1,14 @@ +#pragma once + +#include <SimoxUtility/json/json.h> + +#include <RobotAPI/libraries/aron/common/forward_declarations.h> +#include <RobotAPI/libraries/core/forward_declarations.h> + +namespace armarx +{ + void fromAron(const arondto::Names& dto, armarx::Names& bo); + void toAron(arondto::Names& dto, const armarx::Names& bo); + + +} // namespace armarx diff --git a/source/RobotAPI/libraries/aron/common/forward_declarations.h b/source/RobotAPI/libraries/aron/common/forward_declarations.h index d3c7df9f82d251032ed5f1e49180f74f30cf223f..b6a0cf94f11c3fa43352d8c4cca3d29237ce3c51 100644 --- a/source/RobotAPI/libraries/aron/common/forward_declarations.h +++ b/source/RobotAPI/libraries/aron/common/forward_declarations.h @@ -5,10 +5,12 @@ namespace simox::arondto class AxisAlignedBoundingBox; class Color; class OrientedBox; + } // namespace simox::arondto namespace armarx::arondto { class Names; class FrameID; + } // namespace armarx::arondto diff --git a/source/RobotAPI/libraries/core/CMakeLists.txt b/source/RobotAPI/libraries/core/CMakeLists.txt index 1e4b08820998f187015b03173f5e38c6fee21a14..7756a2cd5be8edad7ee10e8fdcdc25b4501cb008 100644 --- a/source/RobotAPI/libraries/core/CMakeLists.txt +++ b/source/RobotAPI/libraries/core/CMakeLists.txt @@ -20,6 +20,8 @@ set(LIBS RobotAPIInterfaces ArmarXCoreObservers ArmarXCoreStatechart ArmarXCoreE ) set(LIB_FILES + json_conversions.cpp + PIDController.cpp Trajectory.cpp TrajectoryController.cpp @@ -51,6 +53,7 @@ set(LIB_FILES CartesianVelocityControllerWithRamp.cpp CartesianNaturalPositionController.cpp #CartesianNaturalVelocityController.cpp + Names.cpp visualization/DebugDrawerTopic.cpp visualization/GlasbeyLUT.cpp @@ -60,6 +63,9 @@ set(LIB_FILES ) set(LIB_HEADERS + forward_declarations.h + json_conversions.h + PIDController.h MultiDimPIDController.h Trajectory.h @@ -103,14 +109,13 @@ set(LIB_HEADERS CartesianNaturalPositionController.h #CartesianNaturalVelocityController.h EigenHelpers.h + Names.h visualization/DebugDrawerTopic.h visualization/GlasbeyLUT.h #diffik/NaturalDiffIK.h #diffik/SimpleDiffIK.h - - json_conversions.h ) add_subdirectory(test) diff --git a/source/RobotAPI/libraries/core/Names.cpp b/source/RobotAPI/libraries/core/Names.cpp new file mode 100644 index 0000000000000000000000000000000000000000..7e30ec9a3fb6abedb2bd7fb6f12de6e2aba967d1 --- /dev/null +++ b/source/RobotAPI/libraries/core/Names.cpp @@ -0,0 +1,7 @@ +#include "Names.h" + +namespace armarx +{ + + +} // namespace armarx diff --git a/source/RobotAPI/libraries/core/Names.h b/source/RobotAPI/libraries/core/Names.h new file mode 100644 index 0000000000000000000000000000000000000000..6f3ec69588d538c284bcee016db37af5808daed3 --- /dev/null +++ b/source/RobotAPI/libraries/core/Names.h @@ -0,0 +1,15 @@ +#pragma once + +#include <string> +#include <vector> + +namespace armarx +{ + + struct Names + { + std::vector<std::string> recognized; + std::vector<std::string> spoken; + }; + +} // namespace armarx diff --git a/source/RobotAPI/libraries/core/forward_declarations.h b/source/RobotAPI/libraries/core/forward_declarations.h new file mode 100644 index 0000000000000000000000000000000000000000..b3030f5921b332a881d7dffdb715ee076c1979e0 --- /dev/null +++ b/source/RobotAPI/libraries/core/forward_declarations.h @@ -0,0 +1,7 @@ +#pragma once + +namespace armarx +{ + class Names; + class FramedPose; +} // namespace armarx diff --git a/source/RobotAPI/libraries/core/json_conversions.cpp b/source/RobotAPI/libraries/core/json_conversions.cpp new file mode 100644 index 0000000000000000000000000000000000000000..be883c3db8bb45f624ed5b87e489a73666c28b95 --- /dev/null +++ b/source/RobotAPI/libraries/core/json_conversions.cpp @@ -0,0 +1,46 @@ +#include "json_conversions.h" + +#include <RobotAPI/libraries/core/FramedPose.h> +#include <RobotAPI/libraries/core/Names.h> + +void +armarx::to_json(nlohmann::json& j, const FramedPose& fp) +{ + j = nlohmann::json{{"agent", fp.agent}, + {"frame", fp.frame}, + {"qw", fp.orientation->qw}, + {"qx", fp.orientation->qx}, + {"qy", fp.orientation->qy}, + {"qz", fp.orientation->qz}, + {"x", fp.position->x}, + {"y", fp.position->y}, + {"z", fp.position->z}}; +} + +void +armarx::from_json(const nlohmann::json& j, FramedPose& fp) +{ + j.at("agent").get_to(fp.agent); + j.at("frame").get_to(fp.frame); + j.at("qw").get_to(fp.orientation->qw); + j.at("qx").get_to(fp.orientation->qx); + j.at("qy").get_to(fp.orientation->qy); + j.at("qz").get_to(fp.orientation->qz); + j.at("x").get_to(fp.position->x); + j.at("y").get_to(fp.position->y); + j.at("z").get_to(fp.position->z); +} + +void +armarx::to_json(simox::json::json& j, const Names& value) +{ + j["recognized"] = value.recognized; + j["spoken"] = value.spoken; +} + +void +armarx::from_json(const simox::json::json& j, Names& value) +{ + j.at("recognized").get_to(value.recognized); + j.at("spoken").get_to(value.spoken); +} diff --git a/source/RobotAPI/libraries/core/json_conversions.h b/source/RobotAPI/libraries/core/json_conversions.h index bccd85c6884cb75930932cec64a4480742191b20..0d45d0f05ead70ca1ea58c877b3ec0f65f8293f5 100644 --- a/source/RobotAPI/libraries/core/json_conversions.h +++ b/source/RobotAPI/libraries/core/json_conversions.h @@ -20,45 +20,18 @@ * GNU General Public License */ - #pragma once - -// Simox #include <SimoxUtility/json.h> -// RobotAPI -#include <RobotAPI/libraries/core/FramedPose.h> - +#include <RobotAPI/libraries/core/forward_declarations.h> namespace armarx { - void to_json(nlohmann::json& j, const FramedPose& fp) - { - j = nlohmann::json - { - {"agent", fp.agent}, - {"frame", fp.frame}, - {"qw", fp.orientation->qw}, - {"qx", fp.orientation->qx}, - {"qy", fp.orientation->qy}, - {"qz", fp.orientation->qz}, - {"x", fp.position->x}, - {"y", fp.position->y}, - {"z", fp.position->z} - }; - } + void to_json(nlohmann::json& j, const FramedPose& fp); + void from_json(const nlohmann::json& j, FramedPose& fp); + + void to_json(simox::json::json& j, const Names& value); + void from_json(const simox::json::json& j, Names& value); - void from_json(const nlohmann::json& j, FramedPose& fp) - { - j.at("agent").get_to(fp.agent); - j.at("frame").get_to(fp.frame); - j.at("qw").get_to(fp.orientation->qw); - j.at("qx").get_to(fp.orientation->qx); - j.at("qy").get_to(fp.orientation->qy); - j.at("qz").get_to(fp.orientation->qz); - j.at("x").get_to(fp.position->x); - j.at("y").get_to(fp.position->y); - j.at("z").get_to(fp.position->z); - } -} +} // namespace armarx