aron_conversions.cpp
Go to the documentation of this file.
1 #include "aron_conversions.h"
2 
3 #include <optional>
4 
7 
14 
17 #include <armarx/navigation/algorithms/aron/Costmap.aron.generated.h>
18 #include <armarx/navigation/algorithms/aron/Room.aron.generated.h>
19 #include <armarx/navigation/algorithms/aron/ShortestPathFasterAlgorithmParams.aron.generated.h>
24 
26 {
27 
29  toAron(const Costmap::Grid& grid)
30  {
32  }
33 
35  toAron(const std::optional<Costmap::Mask>& mask)
36  {
37  if (not mask.has_value())
38  {
39  return nullptr; // maybe other type?
40  }
41 
43  }
44 
45  inline Costmap::Mask
47  {
49  Costmap::Mask::value_type>(nav);
50  }
51 
53  toAron(const Costmap& bo)
54  {
55  arondto::Costmap dto;
56 
57  dto.cellSize = bo.params().cellSize;
58  dto.robotRadius = bo.params().robotRadius;
59 
60  dto.frame = armarx::GlobalFrame;
61 
62  const Eigen::Isometry2f origin =
63  bo.origin() * Eigen::Translation2f{bo.getLocalSceneBounds().min};
64  dto.origin = navigation::conv::to3D(origin).matrix();
65 
66  auto arn = dto.toAron();
67  arn->setElementCopy("mask", toAron(bo.getMask()));
68  arn->setElementCopy("grid", toAron(bo.getGrid()));
69 
70  return arn;
71  }
72 
73  Costmap
74  fromAron(const armem::wm::EntityInstance& entityInstance)
75  {
76  const auto aronDto = armem::tryCast<algorithms::arondto::Costmap>(entityInstance);
77  ARMARX_CHECK(aronDto) << "Failed casting to Costmap";
78  const auto& dto = *aronDto;
79 
80  ARMARX_DEBUG << entityInstance.data()->getAllKeys();
81 
82  const Costmap::Parameters parameters{
83  .binaryGrid = false, .cellSize = dto.cellSize, .robotRadius = dto.robotRadius};
84 
85  ARMARX_DEBUG << "Converting grid";
86  const auto gridNavigator =
87  aron::data::NDArray::DynamicCast(entityInstance.data()->getElement("grid"));
88 
89  ARMARX_CHECK_NOT_NULL(gridNavigator);
90 
91  Costmap::Grid grid =
92  aron::converter::AronEigenConverter::ConvertToDynamicMatrix<Costmap::Grid::value_type>(
93  *gridNavigator);
94 
95  ARMARX_DEBUG << "Converting mask";
96  std::optional<Costmap::Mask> mask;
97 
98  if (const auto maskNavigator =
99  aron::data::NDArray::DynamicCast(entityInstance.data()->getElement("mask")))
100  {
102  Costmap::Mask::value_type>(*maskNavigator);
103  }
104 
105  const SceneBounds sceneBounds{
106  .min = Eigen::Vector2f::Zero(),
107  .max = Eigen::Vector2f{grid.rows() * dto.cellSize, grid.cols() * dto.cellSize}};
108 
109  const core::Pose2D origin = navigation::conv::to2D(Eigen::Isometry3f{dto.origin});
110 
111  return {grid, parameters, sceneBounds, mask, origin};
112  }
113 
114  void
115  toAron(arondto::ShortestPathFasterAlgorithmParams& dto,
117  {
118  dto.obstacleDistanceCosts = bo.obstacleDistanceCosts;
119  dto.obstacleMaxDistance = bo.obstacleMaxDistance;
120  dto.obstacleDistanceWeight = bo.obstacleDistanceWeight;
121  dto.obstacleCostExponent = bo.obstacleCostExponent;
122  }
123 
124  void
125  fromAron(const arondto::ShortestPathFasterAlgorithmParams& dto,
127  {
128  bo.obstacleDistanceCosts = dto.obstacleDistanceCosts;
129  bo.obstacleMaxDistance = dto.obstacleMaxDistance;
130  bo.obstacleDistanceWeight = dto.obstacleDistanceWeight;
131  bo.obstacleCostExponent = dto.obstacleCostExponent;
132  }
133 
134  void
135  toAron(arondto::Room& dto, const Room& bo)
136  {
137  dto.height = bo.height;
138  dto.name = bo.name;
139  dto.zFloor = bo.zFloor;
140  dto.polygon = conv::to3D(bo.polygon);
141  }
142 
143  void
144  fromAron(const arondto::Room& dto, Room& bo)
145  {
146  bo.height = dto.height;
147  bo.name = dto.name;
148  bo.zFloor = dto.zFloor;
149  bo.polygon = conv::to2D(dto.polygon);
150  }
151 
152 
153 } // namespace armarx::navigation::algorithms
armarx::navigation::algorithms::spfa::ShortestPathFasterAlgorithm::Parameters
Definition: ShortestPathFasterAlgorithm.h:36
basic_types.h
armarx::armem::wm::EntityInstance
Client-side working entity instance.
Definition: memory_definitions.h:32
aron_conversions.h
armarx::aron::data::NDArray
Definition: NDArray.h:48
armarx::navigation::algorithms::fromAron
Costmap fromAron(const armem::wm::EntityInstance &entityInstance)
Definition: aron_conversions.cpp:74
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::aron::data::converter::AronEigenConverter::ConvertFromMatrix
static data::NDArrayPtr ConvertFromMatrix(const Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > &mat)
Definition: EigenConverter.h:151
armarx::GlobalFrame
const std::string GlobalFrame
Definition: FramedPose.h:65
armarx::navigation::algorithms
This file is part of ArmarX.
Definition: aron_conversions.cpp:25
armarx::aron::data::NDArrayPtr
std::shared_ptr< NDArray > NDArrayPtr
Definition: NDArray.h:46
armarx::navigation::algorithms::Costmap::Grid
Eigen::MatrixXf Grid
Definition: Costmap.h:56
Dict.h
armarx::navigation::algorithms::Costmap::Mask
Eigen::Matrix< bool, Eigen::Dynamic, Eigen::Dynamic > Mask
Definition: Costmap.h:59
ARMARX_CHECK
#define ARMARX_CHECK(expression)
Shortcut for ARMARX_CHECK_EXPRESSION.
Definition: ExpressionException.h:82
armarx::navigation::core::Pose2D
Eigen::Isometry2f Pose2D
Definition: basic_types.h:34
armarx::aron::data::detail::SpecializedVariantBase< data::dto::NDArray, NDArray >::DynamicCast
static PointerType DynamicCast(const VariantPtr &n)
Definition: SpecializedVariant.h:116
ShortestPathFasterAlgorithm.h
Costmap.h
armarx::navigation::algorithms::Costmap::Parameters::binaryGrid
bool binaryGrid
Definition: Costmap.h:27
FramedPose.h
armarx::navigation::algorithms::fronAron
Costmap::Mask fronAron(const aron::data::NDArray &nav)
Definition: aron_conversions.cpp:46
ARMARX_DEBUG
#define ARMARX_DEBUG
Definition: Logging.h:184
armarx::navigation::algorithms::toAron
aron::data::NDArrayPtr toAron(const Costmap::Grid &grid)
Definition: aron_conversions.cpp:29
armarx::navigation::algorithms::Room
Definition: Room.h:33
armarx::aron::data::converter::AronEigenConverter::ConvertToDynamicMatrix
static Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic > ConvertToDynamicMatrix(const data::NDArray &nav)
Definition: EigenConverter.h:109
EigenConverter.h
armarx::navigation::algorithms::SceneBounds
Definition: types.h:29
memory_definitions.h
armarx::navigation::conv::to2D
std::vector< Eigen::Vector2f > to2D(const std::vector< Eigen::Vector3f > &v)
Definition: eigen.cpp:29
ExpressionException.h
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
armarx::navigation::algorithms::SceneBounds::min
Eigen::Vector2f min
Definition: types.h:31
armarx::navigation::conv::to3D
std::vector< Eigen::Vector3f > to3D(const std::vector< Eigen::Vector2f > &v)
Definition: eigen.cpp:14
armarx::navigation::algorithms::Costmap::Parameters
Definition: Costmap.h:24
util.h
eigen.h
Logging.h
armarx::armem::base::EntityInstanceBase::data
const DataT & data() const
Definition: EntityInstanceBase.h:129
Room.h
types.h
armarx::aron::bo
const std::optional< BoT > & bo
Definition: aron_conversions.h:174
armarx::navigation::algorithms::Costmap
Definition: Costmap.h:16
NDArray.h