From 90183c5eab3ac760636bcc2e3206719f65bbb9ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 14:24:14 +0200 Subject: [PATCH 1/7] Make visualization inside LocalPlanner ScopedClient --- .../navigation/components/navigator/Component.cpp | 2 +- .../navigation/local_planning/LocalPlanner.cpp | 4 ++-- .../navigation/local_planning/LocalPlanner.h | 4 ++-- .../local_planning/TimedElasticBands.cpp | 15 ++++++++------- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/source/armarx/navigation/components/navigator/Component.cpp b/source/armarx/navigation/components/navigator/Component.cpp index 34d27ae7..3509d2f3 100644 --- a/source/armarx/navigation/components/navigator/Component.cpp +++ b/source/armarx/navigation/components/navigator/Component.cpp @@ -258,7 +258,7 @@ namespace armarx::navigation::components::navigator fac::NavigationStackFactory::create(stackConfig, sceneProvider->scene()); // set visualization of LocalPlanner - stack.localPlanner->setVisualization(&getArvizClient()); + stack.localPlanner->setVisualization(getArvizClient()); memoryIntrospectors.emplace_back( std::make_unique<server::MemoryIntrospector>(resultsWriterPlugin->get(), callerId)); diff --git a/source/armarx/navigation/local_planning/LocalPlanner.cpp b/source/armarx/navigation/local_planning/LocalPlanner.cpp index 4b7ea7ed..ab0fbd22 100644 --- a/source/armarx/navigation/local_planning/LocalPlanner.cpp +++ b/source/armarx/navigation/local_planning/LocalPlanner.cpp @@ -7,8 +7,8 @@ namespace armarx::navigation::local_planning } void - LocalPlanner::setVisualization(viz::Client* vis) + LocalPlanner::setVisualization(viz::Client& vis) { - arviz = vis; + arviz.emplace(vis); } } // namespace armarx::navigation::local_planning diff --git a/source/armarx/navigation/local_planning/LocalPlanner.h b/source/armarx/navigation/local_planning/LocalPlanner.h index f2f6641b..03131881 100644 --- a/source/armarx/navigation/local_planning/LocalPlanner.h +++ b/source/armarx/navigation/local_planning/LocalPlanner.h @@ -58,10 +58,10 @@ namespace armarx::navigation::local_planning virtual std::optional<LocalPlannerResult> plan(const core::GlobalTrajectory& goal) = 0; - void setVisualization(viz::Client* vis); + void setVisualization(viz::Client& vis); protected: - viz::Client* arviz; + std::optional<viz::ScopedClient> arviz; private: const core::Scene& context; diff --git a/source/armarx/navigation/local_planning/TimedElasticBands.cpp b/source/armarx/navigation/local_planning/TimedElasticBands.cpp index 2633583d..daedf66c 100644 --- a/source/armarx/navigation/local_planning/TimedElasticBands.cpp +++ b/source/armarx/navigation/local_planning/TimedElasticBands.cpp @@ -130,9 +130,9 @@ namespace armarx::navigation::local_planning core::LocalTrajectory best = conv::fromRos(hcp_->findBestTeb()->teb()); // visualize path alternatives - if (arviz != nullptr) + if (arviz) { - auto layer = arviz->layer("local_planner_path_alternatives"); + auto layer = arviz.value().layer("local_planner_path_alternatives"); int i = 0; int bestTebIdx = hcp_->bestTebIdx(); @@ -152,7 +152,8 @@ namespace armarx::navigation::local_planning .color(simox::Color::gray())); i++; } - arviz->commit(layer); + + arviz.value().commit(layer); } return {{.trajectory = best}}; @@ -165,9 +166,9 @@ namespace armarx::navigation::local_planning viz::Layer* visPtr = nullptr; viz::Layer visLayer; - if (arviz != nullptr) + if (arviz) { - visLayer = arviz->layer("local_planner_obstacles"); + visLayer = arviz.value().layer("local_planner_obstacles"); visPtr = &visLayer; } @@ -189,9 +190,9 @@ namespace armarx::navigation::local_planning } } - if (arviz != nullptr) + if (arviz) { - arviz->commit(visLayer); + arviz.value().commit(visLayer); } ARMARX_INFO << "TEB: added " << obstManager.size() << " obstacles"; -- GitLab From ee0795dabf509edd05f37326b1786217bcc6cf38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 14:24:33 +0200 Subject: [PATCH 2/7] Fix bounding box coordinates --- source/armarx/navigation/local_planning/TebObstacleManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/armarx/navigation/local_planning/TebObstacleManager.cpp b/source/armarx/navigation/local_planning/TebObstacleManager.cpp index 5e46a901..c7288854 100644 --- a/source/armarx/navigation/local_planning/TebObstacleManager.cpp +++ b/source/armarx/navigation/local_planning/TebObstacleManager.cpp @@ -29,7 +29,7 @@ namespace armarx::navigation::local_planning auto obst = boost::make_shared<teb_local_planner::PolygonObstacle>(); const Eigen::Vector2d min = conv::toRos(bbox.getMin()); - const Eigen::Vector2d max = conv::toRos(bbox.getMin()); + const Eigen::Vector2d max = conv::toRos(bbox.getMax()); obst->pushBackVertex(min); obst->pushBackVertex(min.x(), max.y()); -- GitLab From 05569ad63d0ca019a46b1ed945b94177ecb1003f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 17:20:18 +0200 Subject: [PATCH 3/7] Fix offset paramter Only apply rotation to offset, not translation. --- source/armarx/navigation/human/ProxemicZoneCreator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/armarx/navigation/human/ProxemicZoneCreator.cpp b/source/armarx/navigation/human/ProxemicZoneCreator.cpp index e6495840..3e946a31 100644 --- a/source/armarx/navigation/human/ProxemicZoneCreator.cpp +++ b/source/armarx/navigation/human/ProxemicZoneCreator.cpp @@ -15,8 +15,8 @@ namespace armarx::navigation::human .weight = params.intimateWeight}; // personal zone - auto& global_T_human = human.pose; - auto& global_V_offset = global_T_human * params.offset; + auto& global_R_human = human.pose.linear(); + auto& global_V_offset = global_R_human * params.offset; core::Pose2D pose = human.pose; pose.translation() += global_V_offset; -- GitLab From a59775fe2903e2f114d4f1eaf4a4f69ff9652195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 17:22:26 +0200 Subject: [PATCH 4/7] Use velocity in m/s for stretching --- source/armarx/navigation/human/ProxemicZoneCreator.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/armarx/navigation/human/ProxemicZoneCreator.cpp b/source/armarx/navigation/human/ProxemicZoneCreator.cpp index 3e946a31..8a6aac53 100644 --- a/source/armarx/navigation/human/ProxemicZoneCreator.cpp +++ b/source/armarx/navigation/human/ProxemicZoneCreator.cpp @@ -22,7 +22,8 @@ namespace armarx::navigation::human pose.translation() += global_V_offset; float velocityNorm = human.linearVelocity.norm(); - float movementStretch = 1 + velocityNorm * params.movementInfluence; + // stretch with velocity in m/s as factor + float movementStretch = 1 + velocityNorm * params.movementInfluence / 1000; // [mm] to [m] if (velocityNorm != 0) { // y pointing forward -- GitLab From 1fd9cb56180d6231deb60b0c32c1862ac6149189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 17:39:53 +0200 Subject: [PATCH 5/7] Fix proxemic zone visualization, draw them in different colors Use the proper pose to draw the proxemic zone ellipse. Use different colors for the intimate and personal zones. --- .../armarx/navigation/local_planning/TebObstacleManager.cpp | 6 ++++-- .../armarx/navigation/local_planning/TebObstacleManager.h | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/source/armarx/navigation/local_planning/TebObstacleManager.cpp b/source/armarx/navigation/local_planning/TebObstacleManager.cpp index c7288854..d532e6d9 100644 --- a/source/armarx/navigation/local_planning/TebObstacleManager.cpp +++ b/source/armarx/navigation/local_planning/TebObstacleManager.cpp @@ -58,6 +58,7 @@ namespace armarx::navigation::local_planning { auto proxemicZones = proxemics.createProxemicZones(human); + int i = 0; for (const auto& proxemicZone : proxemicZones) { auto pose = conv::toRos(proxemicZone.pose); @@ -85,13 +86,14 @@ namespace armarx::navigation::local_planning if (visLayer != nullptr) { const Eigen::Vector3f axisLength(proxemicZone.shape.a, proxemicZone.shape.b, 0); - const core::Pose pose3d = conv::to3D(human.pose); + const core::Pose pose3d = conv::to3D(proxemicZone.pose); visLayer->add(viz::Ellipsoid("proxemicZone_" + std::to_string(visualizationIndex++)) .pose(pose3d) .axisLengths(axisLength) - .color(simox::Color::blue())); + .color(PROXEMIC_ZONE_COLOR[i % PROXEMIC_ZONE_COLOR.size()])); } + i++; } } diff --git a/source/armarx/navigation/local_planning/TebObstacleManager.h b/source/armarx/navigation/local_planning/TebObstacleManager.h index b336b65b..b8859c4b 100644 --- a/source/armarx/navigation/local_planning/TebObstacleManager.h +++ b/source/armarx/navigation/local_planning/TebObstacleManager.h @@ -50,6 +50,9 @@ namespace armarx::navigation::local_planning teb_local_planner::ObstContainer& container; human::ProxemicZoneCreator proxemics; int visualizationIndex; + + const std::array<simox::Color, 2> PROXEMIC_ZONE_COLOR = {simox::Color::red(), + simox::Color::blue()}; }; -- GitLab From 0e2a263a86f90004dd99fa6183c24767af000e07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 18:20:57 +0200 Subject: [PATCH 6/7] Normalize angle in ros conversions --- source/armarx/navigation/local_planning/ros_conversions.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/source/armarx/navigation/local_planning/ros_conversions.cpp b/source/armarx/navigation/local_planning/ros_conversions.cpp index 4bb21ef4..86fd6a2c 100644 --- a/source/armarx/navigation/local_planning/ros_conversions.cpp +++ b/source/armarx/navigation/local_planning/ros_conversions.cpp @@ -49,6 +49,8 @@ namespace armarx::navigation::conv // we change it such that x is pointing forward. // ROS: x pointing forward, ArmarX: y pointing forward theta += M_PI_2; + // normalize angle + theta = g2o::normalize_theta(theta); return {pos / 1000., theta}; // [mm] to [m] } -- GitLab From 9286eebd79692745637d249723cc162356ae02c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 25 Aug 2022 18:21:25 +0200 Subject: [PATCH 7/7] Add some comments --- source/armarx/navigation/human/ProxemicZoneCreator.h | 4 +++- .../armarx/navigation/local_planning/TebObstacleManager.cpp | 2 ++ source/armarx/navigation/local_planning/TimedElasticBands.cpp | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/armarx/navigation/human/ProxemicZoneCreator.h b/source/armarx/navigation/human/ProxemicZoneCreator.h index d1696db4..fed4c18c 100644 --- a/source/armarx/navigation/human/ProxemicZoneCreator.h +++ b/source/armarx/navigation/human/ProxemicZoneCreator.h @@ -38,7 +38,9 @@ namespace armarx::navigation::human float personalRadius = 1000; float movementInfluence = 1; - // in the coordinate system of the human + // an offset applied to the personal zone in the coordinate system of the human + // a positive x-value means an offset to the right + // a positive y-value means an offset to the front Eigen::Vector2f offset{100, 150}; }; diff --git a/source/armarx/navigation/local_planning/TebObstacleManager.cpp b/source/armarx/navigation/local_planning/TebObstacleManager.cpp index d532e6d9..35d3afb4 100644 --- a/source/armarx/navigation/local_planning/TebObstacleManager.cpp +++ b/source/armarx/navigation/local_planning/TebObstacleManager.cpp @@ -39,6 +39,7 @@ namespace armarx::navigation::local_planning obst->finalizePolygon(); container.push_back(obst); + // visualize bounding box if layer is available if (visLayer != nullptr) { const Eigen::Vector3f min3d = conv::fromRos(min); @@ -83,6 +84,7 @@ namespace armarx::navigation::local_planning container.push_back(obst); + // visualize proxemic zone if layer is available if (visLayer != nullptr) { const Eigen::Vector3f axisLength(proxemicZone.shape.a, proxemicZone.shape.b, 0); diff --git a/source/armarx/navigation/local_planning/TimedElasticBands.cpp b/source/armarx/navigation/local_planning/TimedElasticBands.cpp index daedf66c..91483e74 100644 --- a/source/armarx/navigation/local_planning/TimedElasticBands.cpp +++ b/source/armarx/navigation/local_planning/TimedElasticBands.cpp @@ -112,7 +112,7 @@ namespace armarx::navigation::local_planning geometry_msgs::Twist velocity_start = conv::toRos(scene.platformVelocity); - //TODO (SALt): fill obstacles + fillObstacles(); try -- GitLab