From da60b8ca1bbdce1c7ce451ce632b0f08851283cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Gr=C3=B6ger?= <tobias.groeger@student.kit.edu> Date: Thu, 22 Sep 2022 19:15:21 +0200 Subject: [PATCH] Add penalty model conversions --- source/armarx/navigation/human/types.h | 6 ++++++ .../local_planning/TebObstacleManager.cpp | 7 +++---- .../navigation/local_planning/ros_conversions.cpp | 15 +++++++++++++++ .../navigation/local_planning/ros_conversions.h | 9 +++++++-- 4 files changed, 31 insertions(+), 6 deletions(-) diff --git a/source/armarx/navigation/human/types.h b/source/armarx/navigation/human/types.h index fe5490d5..0c3e0804 100644 --- a/source/armarx/navigation/human/types.h +++ b/source/armarx/navigation/human/types.h @@ -57,6 +57,12 @@ namespace armarx::navigation::human using HumanGroups = std::vector<HumanGroup>; + struct LinearPenaltyModel + { + float minDistance; // [m] + float epsilon; // [m] + }; + struct ExponentialPenaltyModel { float minDistance; // [m] diff --git a/source/armarx/navigation/local_planning/TebObstacleManager.cpp b/source/armarx/navigation/local_planning/TebObstacleManager.cpp index 8f82f74d..add2038f 100644 --- a/source/armarx/navigation/local_planning/TebObstacleManager.cpp +++ b/source/armarx/navigation/local_planning/TebObstacleManager.cpp @@ -70,9 +70,7 @@ namespace armarx::navigation::local_planning const auto& penalty = proxemicZone.penalty; - obst->setPenaltyModel(boost::make_shared<teb_local_planner::ExponentialPenaltyModel>( - teb_local_planner::LinearPenaltyModel(penalty.minDistance, penalty.epsilon), - penalty.exponent)); + obst->setPenaltyModel(conv::toRos(penalty)); obst->setWeight(proxemicZone.weight); obst->setHomotopicRelevance(proxemicZone.homotopicRelevance); @@ -87,7 +85,8 @@ namespace armarx::navigation::local_planning // visualize proxemic zone if layer is available if (visLayer != nullptr) { - const Eigen::Vector3f axisLength(proxemicZone.shape.a, proxemicZone.shape.b, 10.f-i); + const Eigen::Vector3f axisLength( + proxemicZone.shape.a, proxemicZone.shape.b, 10.f - i); const core::Pose pose3d = conv::to3D(proxemicZone.pose); visLayer->add(viz::Ellipsoid("proxemicZone_" + std::to_string(visualizationIndex++)) diff --git a/source/armarx/navigation/local_planning/ros_conversions.cpp b/source/armarx/navigation/local_planning/ros_conversions.cpp index 2303b64c..657db4c4 100644 --- a/source/armarx/navigation/local_planning/ros_conversions.cpp +++ b/source/armarx/navigation/local_planning/ros_conversions.cpp @@ -191,4 +191,19 @@ namespace armarx::navigation::conv return teb_local_planner::Costmap{teb_grid, teb_params, teb_bounds, teb_mask, teb_origin}; } + teb_local_planner::PenaltyModelPtr + toRos(const human::LinearPenaltyModel& model) + { + return boost::make_shared<teb_local_planner::LinearPenaltyModel>( + teb_local_planner::LinearPenaltyModel(model.minDistance, model.epsilon)); + } + + teb_local_planner::PenaltyModelPtr + toRos(const human::ExponentialPenaltyModel& model) + { + return boost::make_shared<teb_local_planner::ExponentialPenaltyModel>( + teb_local_planner::LinearPenaltyModel(model.minDistance, model.epsilon), + model.exponent); + } + } // namespace armarx::navigation::conv diff --git a/source/armarx/navigation/local_planning/ros_conversions.h b/source/armarx/navigation/local_planning/ros_conversions.h index 05b52e77..083ddcc5 100644 --- a/source/armarx/navigation/local_planning/ros_conversions.h +++ b/source/armarx/navigation/local_planning/ros_conversions.h @@ -21,14 +21,15 @@ #pragma once +#include <armarx/navigation/algorithms/Costmap.h> #include <armarx/navigation/core/basic_types.h> #include <armarx/navigation/core/types.h> #include <armarx/navigation/human/shapes.h> #include <geometry_msgs/Twist.h> +#include <teb_local_planner/costmap.h> +#include <teb_local_planner/penalty_models.h> #include <teb_local_planner/pose_se2.h> #include <teb_local_planner/timed_elastic_band.h> -#include <teb_local_planner/costmap.h> -#include <armarx/navigation/algorithms/Costmap.h> namespace armarx::navigation::conv { @@ -53,4 +54,8 @@ namespace armarx::navigation::conv teb_local_planner::Costmap toRos(const algorithms::Costmap& costmap); + teb_local_planner::PenaltyModelPtr toRos(const human::LinearPenaltyModel& model); + + teb_local_planner::PenaltyModelPtr toRos(const human::ExponentialPenaltyModel& model); + } // namespace armarx::navigation::conv -- GitLab