From 73fc69cb843311ef737de7ca70897ca4a2098d28 Mon Sep 17 00:00:00 2001 From: Sergi Hernandez Juan <shernand@iri.upc.edu> Date: Mon, 1 Nov 2021 09:03:50 +0100 Subject: [PATCH] Implemented the functions to handle the footprint in the costmap module. Split the original package into two: this one has the implementation of the generic navigation module. --- CMakeLists.txt | 52 +- cfg/ADCNavBtClient.cfg | 56 -- cfg/ADCNavClient.cfg | 68 -- cfg/ADCNavModule.cfg | 44 -- config/adc_nav_module_default.yaml | 24 - include/adc_nav_bt_client_alg_node.h | 159 ----- include/adc_nav_client_alg.h | 131 ---- include/adc_nav_client_alg_node.h | 119 ---- .../iri_adc_nav_module/adc_nav_bt_module.h | 650 ----------------- include/iri_adc_nav_module/adc_nav_module.h | 262 ------- .../ackermann_lp_module.h | 2 +- .../nav_costmap_module.h | 22 + .../nav_module.h | 2 +- .../nav_planner_module.h | 0 .../opendrive_gp_module.h | 2 +- launch/adc_nav_bt_client.launch | 57 -- launch/adc_nav_client.launch | 59 -- package.xml | 10 +- setup.py | 2 +- src/adc_nav_bt_client_alg_node.cpp | 105 --- src/adc_nav_bt_module.cpp | 655 ------------------ src/adc_nav_client_alg.cpp | 23 - src/adc_nav_client_alg_node.cpp | 139 ---- src/adc_nav_module.cpp | 239 ------- src/iri_adc_nav_module/dyn_params.pyc | Bin 1678 -> 0 bytes .../__init__.py | 0 .../dyn_params.py | 8 + src/xml/bt_test.xml | 184 ----- 28 files changed, 52 insertions(+), 3022 deletions(-) delete mode 100755 cfg/ADCNavBtClient.cfg delete mode 100755 cfg/ADCNavClient.cfg delete mode 100755 cfg/ADCNavModule.cfg delete mode 100644 config/adc_nav_module_default.yaml delete mode 100644 include/adc_nav_bt_client_alg_node.h delete mode 100644 include/adc_nav_client_alg.h delete mode 100644 include/adc_nav_client_alg_node.h delete mode 100644 include/iri_adc_nav_module/adc_nav_bt_module.h delete mode 100644 include/iri_adc_nav_module/adc_nav_module.h rename include/{iri_adc_nav_module => iri_nav_module}/ackermann_lp_module.h (99%) rename include/{iri_adc_nav_module => iri_nav_module}/nav_costmap_module.h (90%) rename include/{iri_adc_nav_module => iri_nav_module}/nav_module.h (99%) rename include/{iri_adc_nav_module => iri_nav_module}/nav_planner_module.h (100%) rename include/{iri_adc_nav_module => iri_nav_module}/opendrive_gp_module.h (99%) delete mode 100644 launch/adc_nav_bt_client.launch delete mode 100644 launch/adc_nav_client.launch delete mode 100644 src/adc_nav_bt_client_alg_node.cpp delete mode 100644 src/adc_nav_bt_module.cpp delete mode 100644 src/adc_nav_client_alg.cpp delete mode 100644 src/adc_nav_client_alg_node.cpp delete mode 100644 src/adc_nav_module.cpp delete mode 100644 src/iri_adc_nav_module/dyn_params.pyc rename src/{iri_adc_nav_module => iri_nav_module}/__init__.py (100%) rename src/{iri_adc_nav_module => iri_nav_module}/dyn_params.py (87%) delete mode 100644 src/xml/bt_test.xml diff --git a/CMakeLists.txt b/CMakeLists.txt index 9695ebd..a3d2b20 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 2.8.3) -project(iri_adc_nav_module) +project(iri_nav_module) ## Add support for C++11, supported in ROS Kinetic and newer add_definitions(-std=c++11) @@ -7,7 +7,7 @@ add_definitions(-std=c++11) ## Find catkin macros and libraries ## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) ## is used, also find other catkin packages -find_package(catkin REQUIRED COMPONENTS roscpp dynamic_reconfigure iri_ros_tools actionlib std_srvs move_base_msgs tf2_ros nav_msgs iri_base_algorithm iri_base_bt_client iri_behaviortree iri_adc_msgs) +find_package(catkin REQUIRED COMPONENTS roscpp dynamic_reconfigure iri_ros_tools actionlib std_srvs move_base_msgs tf2_ros nav_msgs iri_base_algorithm iri_adc_msgs costmap_2d) ## System dependencies are found with CMake's conventions # find_package(Boost REQUIRED COMPONENTS system) @@ -85,11 +85,8 @@ catkin_python_setup() ## and list every .cfg file to be processed ## Generate dynamic reconfigure parameters in the 'cfg' folder -generate_dynamic_reconfigure_options( - cfg/ADCNavModule.cfg - cfg/ADCNavClient.cfg - cfg/ADCNavBtClient.cfg -) +# generate_dynamic_reconfigure_options( +# ) ################################### ## catkin specific configuration ## @@ -100,13 +97,12 @@ generate_dynamic_reconfigure_options( ## LIBRARIES: libraries you create in this project that dependent projects also need ## CATKIN_DEPENDS: catkin_packages dependent projects also need ## DEPENDS: system dependencies of this project that dependent projects also need -set(module_name iri_adc_nav_module) -set(module_bt_name iri_adc_nav_module_bt) +set(module_name iri_nav_module) catkin_package( INCLUDE_DIRS include - LIBRARIES ${module_name} ${module_bt_name} - CATKIN_DEPENDS roscpp dynamic_reconfigure iri_ros_tools actionlib std_srvs move_base_msgs tf2_ros nav_msgs iri_base_algorithm iri_base_bt_client iri_behaviortree iri_adc_msgs + LIBRARIES ${module_name} + CATKIN_DEPENDS roscpp dynamic_reconfigure iri_ros_tools actionlib std_srvs move_base_msgs tf2_ros nav_msgs iri_base_algorithm iri_adc_msgs costmap_2d # DEPENDS system_lib ) @@ -123,8 +119,13 @@ include_directories(${iriutils_INCLUDE_DIR}) ## Declare a C++ libraryi # Module add_library(${module_name} - src/adc_nav_module.cpp + include/${PROJECT_NAME}/ackermann_lp_module.h + include/${PROJECT_NAME}/nav_costmap_module.h + include/${PROJECT_NAME}/nav_module.h + include/${PROJECT_NAME}/nav_planner_module.h + include/${PROJECT_NAME}/opendrive_gp_module.h ) +set_target_properties(${module_name} PROPERTIES LINKER_LANGUAGE CXX) target_link_libraries(${module_name} ${catkin_LIBRARIES}) target_link_libraries(${module_name} ${iriutils_LIBRARY}) @@ -134,34 +135,9 @@ target_link_libraries(${module_name} ${iriutils_LIBRARY}) ## Add cmake target dependencies of the library ## as an example, code may need to be generated before libraries ## either from message generation or dynamic reconfigure -add_dependencies(${module_name} ${${PROJECT_NAME}_EXPORTED_TARGETS}) +# add_dependencies(${module_name} ${${PROJECT_NAME}_EXPORTED_TARGETS}) ## Declare a C++ executable -#Module_client -set(client_name adc_nav_client) -add_executable(${client_name} src/adc_nav_client_alg.cpp src/adc_nav_client_alg_node.cpp) - -target_link_libraries(${client_name} ${catkin_LIBRARIES}) -target_link_libraries(${client_name} ${iriutils_LIBRARY}) -target_link_libraries(${client_name} ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/lib${module_name}.so) - -add_dependencies(${client_name} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${module_name}) -add_dependencies(${client_name} ${adc_nav_client_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) - -#BT_module -#add_library(${module_bt_name} src/adc_nav_bt_module.cpp) -#target_link_libraries(${module_bt_name} ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/lib${module_name}.so) -#target_link_libraries(${module_bt_name} ${catkin_LIBRARIES}) -#target_link_libraries(${module_bt_name} ${iriutils_LIBRARIES}) -#add_dependencies(${module_bt_name} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS} ${module_name}) - -#BT_client -#set(bt_client_name adc_nav_bt_client) -#add_executable(${bt_client_name} src/adc_nav_bt_client_alg_node.cpp) -#target_link_libraries(${bt_client_name} ${catkin_LIBRARIES}) -#target_link_libraries(${bt_client_name} ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/lib${module_name}.so) -#target_link_libraries(${bt_client_name} ${CATKIN_DEVEL_PREFIX}/${CATKIN_GLOBAL_LIB_DESTINATION}/lib${module_bt_name}.so) -#add_dependencies(${bt_client_name} ${${PROJECT_NAME}_EXPORTED_TARGETS} ${module_name} ${module_bt_name}) ############# ## Install ## diff --git a/cfg/ADCNavBtClient.cfg b/cfg/ADCNavBtClient.cfg deleted file mode 100755 index 5c7ad97..0000000 --- a/cfg/ADCNavBtClient.cfg +++ /dev/null @@ -1,56 +0,0 @@ -#! /usr/bin/env python -#* All rights reserved. -#* -#* Redistribution and use in source and binary forms, with or without -#* modification, are permitted provided that the following conditions -#* are met: -#* -#* * Redistributions of source code must retain the above copyright -#* notice, this list of conditions and the following disclaimer. -#* * Redistributions in binary form must reproduce the above -#* copyright notice, this list of conditions and the following -#* disclaimer in the documentation and/or other materials provided -#* with the distribution. -#* * Neither the name of the Willow Garage nor the names of its -#* contributors may be used to endorse or promote products derived -#* from this software without specific prior written permission. -#* -#* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -#* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -#* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -#* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -#* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -#* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -#* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -#* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -#* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -#* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -#* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -#* POSSIBILITY OF SUCH DAMAGE. -#*********************************************************** - -# Author: - -PACKAGE='adc_nav_module' - -from dynamic_reconfigure.parameter_generator_catkin import * -from iri_base_bt_client.submodule import add_bt_client_params - -gen = ParameterGenerator() -move_base = gen.add_group("Move base action") - -# Name Type Reconfiguration level Description Default Min Max -#gen.add("velocity_scale_factor", double_t, 0, "Maximum velocity scale factor", 0.5, 0.0, 1.0) -add_bt_client_params(gen) -gen.add("START", bool_t, 0, "synchronous start", False) -gen.add("RESTART", bool_t, 0, "asynchronous restart of BT", False) - -move_base.add("set_go_to_input", bool_t, 0, "Set go to parameters", False) -move_base.add("mb_x_pos", double_t, 0, "Target X position", 0.0, -100.0, 100.0) -move_base.add("mb_y_pos", double_t, 0, "Target Y position", 0.0, -100.0, 100.0) -move_base.add("mb_xy_tol", double_t, 0, "Target XY tolerance", -1.0, -1.0, 10.0) -move_base.add("mb_yaw", double_t, 0, "Target Yaw angle", 0.0, -3.14159,3.14159) -move_base.add("mb_yaw_tol", double_t, 0, "Target Yaw tolerance", -1.0, -1.0, 1.0) -move_base.add("mb_frame_id", str_t, 0, "Target pose frame identifier", "map") - -exit(gen.generate(PACKAGE, "ADCNavModuleBtClientAlgNode", "ADCNavBtClient")) diff --git a/cfg/ADCNavClient.cfg b/cfg/ADCNavClient.cfg deleted file mode 100755 index a39277e..0000000 --- a/cfg/ADCNavClient.cfg +++ /dev/null @@ -1,68 +0,0 @@ -#! /usr/bin/env python -#* All rights reserved. -#* -#* Redistribution and use in source and binary forms, with or without -#* modification, are permitted provided that the following conditions -#* are met: -#* -#* * Redistributions of source code must retain the above copyright -#* notice, this list of conditions and the following disclaimer. -#* * Redistributions in binary form must reproduce the above -#* copyright notice, this list of conditions and the following -#* disclaimer in the documentation and/or other materials provided -#* with the distribution. -#* * Neither the name of the Willow Garage nor the names of its -#* contributors may be used to endorse or promote products derived -#* from this software without specific prior written permission. -#* -#* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -#* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -#* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -#* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -#* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -#* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -#* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -#* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -#* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -#* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -#* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -#* POSSIBILITY OF SUCH DAMAGE. -#*********************************************************** - -# Author: - -PACKAGE='iri_adc_nav_module' - -from dynamic_reconfigure.parameter_generator_catkin import * - -gen = ParameterGenerator() - -move_base = gen.add_group("Move base action") -costmaps = gen.add_group("Costmap") -global_planner = gen.add_group("Global planner") - -# Name Type Reconfiguration level Description Default Min Max -#gen.add("velocity_scale_factor", double_t, 0, "Maximum velocity scale factor", 0.5, 0.0, 1.0) -move_base.add("mb_x_pos", double_t, 0, "Target X position", 0.0, -100.0, 100.0) -move_base.add("mb_y_pos", double_t, 0, "Target Y position", 0.0, -100.0, 100.0) -move_base.add("mb_xy_tol", double_t, 0, "Target XY tolerance", -1.0, -1.0, 10.0) -move_base.add("mb_yaw", double_t, 0, "Target Yaw angle", 0.0, -3.14159,3.14159) -move_base.add("mb_yaw_tol", double_t, 0, "Target Yaw tolerance", -1.0, -1.0, 1.0) -move_base.add("mb_frame_id", str_t, 0, "Target pose frame identifier", "map") - -costmaps.add("cm_enable_auto_clear",bool_t, 0, "Enable costmaps autoclear", False) -costmaps.add("cm_disable_auto_clear",bool_t, 0, "Disable costmaps autoclear", False) -costmaps.add("cm_auto_clear_rate_hz",double_t,0, "Costmap autoclear rate", 0.1, 0.01, 1.0) -costmaps.add("cm_clear_costmaps", bool_t, 0, "Clear costmaps", False) - -move_base.add("start_pose_nav", bool_t, 0, "Start navigating towards a pose", False) -move_base.add("start_position_nav",bool_t, 0, "Start navigating towards a position", False) -move_base.add("start_orientation_nav",bool_t, 0, "Start navigating towards a orientation", False) -move_base.add("stop_nav", bool_t, 0, "Stop the current navigation", False) -move_base.add("print_goal_distance",bool_t, 0, "Print distance to goal", False) -move_base.add("get_plan" ,bool_t, 0, "Get a plan from the current position to the goal position", False) - -global_planner.add("get_opendrive_map",bool_t,0, "Get the whole opendrive map", False) -global_planner.add("get_opendrive_nodes",bool_t,0, "Get the opendrive nodes of the current plan", False) - -exit(gen.generate(PACKAGE, "ADCNavClient", "ADCNavClient")) diff --git a/cfg/ADCNavModule.cfg b/cfg/ADCNavModule.cfg deleted file mode 100755 index 74d6be7..0000000 --- a/cfg/ADCNavModule.cfg +++ /dev/null @@ -1,44 +0,0 @@ -#! /usr/bin/env python -#* All rights reserved. -#* -#* Redistribution and use in source and binary forms, with or without -#* modification, are permitted provided that the following conditions -#* are met: -#* -#* * Redistributions of source code must retain the above copyright -#* notice, this list of conditions and the following disclaimer. -#* * Redistributions in binary form must reproduce the above -#* copyright notice, this list of conditions and the following -#* disclaimer in the documentation and/or other materials provided -#* with the distribution. -#* * Neither the name of the Willow Garage nor the names of its -#* contributors may be used to endorse or promote products derived -#* from this software without specific prior written permission. -#* -#* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -#* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -#* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -#* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -#* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -#* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -#* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -#* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -#* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -#* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -#* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -#* POSSIBILITY OF SUCH DAMAGE. -#*********************************************************** - -# Author: - -PACKAGE='iri_adc_nav_module' - -from dynamic_reconfigure.parameter_generator_catkin import * -from iri_adc_nav_module.dyn_params import add_nav_module_params - -gen = ParameterGenerator() - -nav_module = add_nav_module_params(gen,"nav") - -exit(gen.generate(PACKAGE, "ADCNavModuleAlgorithm", "ADCNavModule")) - diff --git a/config/adc_nav_module_default.yaml b/config/adc_nav_module_default.yaml deleted file mode 100644 index 20f5b03..0000000 --- a/config/adc_nav_module_default.yaml +++ /dev/null @@ -1,24 +0,0 @@ -nav_module_rate_hz: 1.0 - -move_base_max_retries: 1 -move_base_feedback_watchdog_time_s: 1.0 -move_base_enable_watchdog: True -move_base_timeout_s: 100.0 -move_base_enable_timeout: True -move_base_frame_id: "map" -move_base_enabled: True -move_base_cancel_prev: True - -odom_watchdog_time_s: 1.0 - -tf_timeout_time_s: 5.0 - -clear_costmaps_max_retries: 1.0 -clear_costmaps_enable_auto_clear: False -clear_costmaps_auto_clear_rate_hz: 0.1 -clear_costmaps_enabled: True - -make_plan_max_retries: 1.0 -make_plan_enable_auto_clear: False -make_plan_auto_clear_rate_hz: 0.1 -make_plan_enabled: True diff --git a/include/adc_nav_bt_client_alg_node.h b/include/adc_nav_bt_client_alg_node.h deleted file mode 100644 index 2a5f098..0000000 --- a/include/adc_nav_bt_client_alg_node.h +++ /dev/null @@ -1,159 +0,0 @@ -// Copyright (C) Institut de Robotica i Informatica Industrial, CSIC-UPC. -// Author -// All rights reserved. -// -// This file is part of iri-ros-pkg -// iri-ros-pkg is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// IMPORTANT NOTE: This code has been generated through a script from the -// iri_ros_scripts. Please do NOT delete any comments to guarantee the correctness -// of the scripts. ROS topics can be easly add by using those scripts. Please -// refer to the IRI wiki page for more information: -// http://wikiri.upc.es/index.php/Robotics_Lab - -#ifndef _adc_nav_module_bt_client_alg_node_h_ -#define _adc_nav_module_bt_client_alg_node_h_ - -#include <iri_base_bt_client/iri_base_bt_client.h> -#include <adc_nav_module/ADCNavBtClientConfig.h> - -#include "adc_nav_module/adc_nav_bt_module.h" -#include <sensor_msgs/JointState.h> -#include <geometry_msgs/PoseStamped.h> - -// [publisher subscriber headers] - -// [service client headers] - -// [action server client headers] - -/** - * \brief IRI ROS Specific Algorithm Class - * - */ -class ADCNavModuleBtClientAlgNode : public behaviortree_base::IriBaseBTClient<adc_nav_module::ADCNavBtClientConfig> -{ - private: - // object of module - CADCNavModuleBT adc_nav_module_bt; - - // Client actions and conditions (always return BT::NodeStatus::SUCCESS) - - // [publisher attributes] - - // [subscriber attributes] - - // [service attributes] - - // [client attributes] - - // [action server attributes] - - // [action client attributes] - - bool set_go_to_pose; - /** - * \brief Async function to set the adc_nav_move_to_joints input ports. - * - * It takes the values from Dynamic Reconfigure. - * - * It has the following output ports: - * - * x (double): desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * y (double): desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * yaw (double): desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * heading_tol (double): heading tolerance for the goal. - * - * x_y_pos_tol (double): position tolerance for the goal. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus set_adc_nav_go_to_pose_inputs(BT::TreeNode& self); - - /** - * \brief Async function to set the set_adc_nav_goal_frame input ports - * - * It has the following output ports: - * - * frame_id (std::string): name of the new reference frame for the future goals. - * This frame can be any that exist inside the TF tree - * of the robot. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus set_adc_nav_goal_frame_inputs(BT::TreeNode& self); - - public: - /** - * \brief Constructor - * - * This constructor initializes specific class attributes and all ROS - * communications variables to enable message exchange. - */ - ADCNavModuleBtClientAlgNode(void); - - /** - * \brief Destructor - * - * This destructor frees all necessary dynamic memory allocated within this - * this class. - */ - ~ADCNavModuleBtClientAlgNode(void); - - protected: - - /** - * \brief dynamic reconfigure server callback - * - * This method is called whenever a new configuration is received through - * the dynamic reconfigure. The derivated generic algorithm class must - * implement it. - * - * \param config an object with new configuration from all algorithm - * parameters defined in the config file. - * \param level integer referring the level in which the configuration - * has been changed. - */ - void node_config_update(adc_nav_module::ADCNavBtClientConfig &config, uint32_t level); - - /** - * \brief node add diagnostics - * - * In this abstract function additional ROS diagnostics applied to the - * specific algorithms may be added. - */ - void addNodeDiagnostics(void); - - // [diagnostic functions] - - // [test functions] -}; - -#endif diff --git a/include/adc_nav_client_alg.h b/include/adc_nav_client_alg.h deleted file mode 100644 index eda4697..0000000 --- a/include/adc_nav_client_alg.h +++ /dev/null @@ -1,131 +0,0 @@ -// Copyright (C) 2010-2011 Institut de Robotica i Informatica Industrial, CSIC-UPC. -// Author -// All rights reserved. -// -// This file is part of iri-ros-pkg -// iri-ros-pkg is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// IMPORTANT NOTE: This code has been generated through a script from the -// iri_ros_scripts. Please do NOT delete any comments to guarantee the correctness -// of the scripts. ROS topics can be easly add by using those scripts. Please -// refer to the IRI wiki page for more information: -// http://wikiri.upc.es/index.php/Robotics_Lab - -#ifndef _adc_nav_client_alg_h_ -#define _adc_nav_client_alg_h_ - -#include <iri_adc_nav_module/ADCNavClientConfig.h> - -//include humanoid_common_adc_nav_client_alg main library - -/** - * \brief IRI ROS Specific Driver Class - * - * - */ -class ADCNavClientAlgorithm -{ - protected: - /** - * \brief define config type - * - * Define a Config type with the ADCNavClientConfig. All driver implementations - * will then use the same variable type Config. - */ - pthread_mutex_t access_; - - // private attributes and methods - - public: - /** - * \brief define config type - * - * Define a Config type with the ADCNavClientConfig. All driver implementations - * will then use the same variable type Config. - */ - typedef iri_adc_nav_module::ADCNavClientConfig Config; - - /** - * \brief config variable - * - * This variable has all the driver parameters defined in the cfg config file. - * Is updated everytime function config_update() is called. - */ - Config config_; - - /** - * \brief constructor - * - * In this constructor parameters related to the specific driver can be - * initalized. Those parameters can be also set in the openDriver() function. - * Attributes from the main node driver class IriBaseDriver such as loop_rate, - * may be also overload here. - */ - ADCNavClientAlgorithm(void); - - /** - * \brief Lock Algorithm - * - * Locks access to the Algorithm class - */ - void lock(void) { pthread_mutex_lock(&this->access_); }; - - /** - * \brief Unlock Algorithm - * - * Unlocks access to the Algorithm class - */ - void unlock(void) { pthread_mutex_unlock(&this->access_); }; - - /** - * \brief Tries Access to Algorithm - * - * Tries access to Algorithm - * - * \return true if the lock was adquired, false otherwise - */ - bool try_enter(void) - { - if(pthread_mutex_trylock(&this->access_)==0) - return true; - else - return false; - }; - - /** - * \brief config update - * - * In this function the driver parameters must be updated with the input - * config variable. Then the new configuration state will be stored in the - * Config attribute. - * - * \param new_cfg the new driver configuration state - * - * \param level level in which the update is taken place - */ - void config_update(Config& new_cfg, uint32_t level=0); - - // here define all adc_nav_client_alg interface methods to retrieve and set - // the driver parameters - - /** - * \brief Destructor - * - * This destructor is called when the object is about to be destroyed. - * - */ - ~ADCNavClientAlgorithm(void); -}; - -#endif diff --git a/include/adc_nav_client_alg_node.h b/include/adc_nav_client_alg_node.h deleted file mode 100644 index 1326e32..0000000 --- a/include/adc_nav_client_alg_node.h +++ /dev/null @@ -1,119 +0,0 @@ -// Copyright (C) 2010-2011 Institut de Robotica i Informatica Industrial, CSIC-UPC. -// Author -// All rights reserved. -// -// This file is part of iri-ros-pkg -// iri-ros-pkg is free software: you can redistribute it and/or modify -// it under the terms of the GNU Lesser General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Lesser General Public License for more details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this program. If not, see <http://www.gnu.org/licenses/>. -// -// IMPORTANT NOTE: This code has been generated through a script from the -// iri_ros_scripts. Please do NOT delete any comments to guarantee the correctness -// of the scripts. ROS topics can be easly add by using those scripts. Please -// refer to the IRI wiki page for more information: -// http://wikiri.upc.es/index.php/Robotics_Lab - -#ifndef _adc_nav_client_alg_node_h_ -#define _adc_nav_client_alg_node_h_ - -#include <iri_base_algorithm/iri_base_algorithm.h> -#include "adc_nav_client_alg.h" - -// [publisher subscriber headers] - -// [service client headers] - -// [nav server client headers] - -#include <iri_adc_nav_module/adc_nav_module.h> - -/** - * \brief IRI ROS Specific Algorithm Class - * - */ -class ADCNavClientAlgNode : public algorithm_base::IriBaseAlgorithm<ADCNavClientAlgorithm> -{ - private: - // [publisher attributes] - - // [subscriber attributes] - - // [service attributes] - - // [client attributes] - - // [nav server attributes] - - // [nav client attributes] - - CADCNavModule nav; - - public: - /** - * \brief Constructor - * - * This constructor initializes specific class attributes and all ROS - * communications variables to enable message exchange. - */ - ADCNavClientAlgNode(void); - - /** - * \brief Destructor - * - * This destructor frees all necessary dynamic memory allocated within this - * this class. - */ - ~ADCNavClientAlgNode(void); - - protected: - /** - * \brief main node thread - * - * This is the main thread node function. Code written here will be executed - * in every node loop while the algorithm is on running state. Loop frequency - * can be tuned by modifying loop_rate attribute. - * - * Here data related to the process loop or to ROS topics (mainly data structs - * related to the MSG and SRV files) must be updated. ROS publisher objects - * must publish their data in this process. ROS client servers may also - * request data to the corresponding server topics. - */ - void mainNodeThread(void); - - /** - * \brief dynamic reconfigure server callback - * - * This method is called whenever a new configuration is received through - * the dynamic reconfigure. The derivated generic algorithm class must - * implement it. - * - * \param config an object with new configuration from all algorithm - * parameters defined in the config file. - * \param level integer referring the level in which the configuration - * has been changed. - */ - void node_config_update(Config &config, uint32_t level); - - /** - * \brief node add diagnostics - * - * In this abstract function additional ROS diagnostics applied to the - * specific algorithms may be added. - */ - void addNodeDiagnostics(void); - - // [diagnostic functions] - - // [test functions] -}; - -#endif diff --git a/include/iri_adc_nav_module/adc_nav_bt_module.h b/include/iri_adc_nav_module/adc_nav_bt_module.h deleted file mode 100644 index 9ffbfbb..0000000 --- a/include/iri_adc_nav_module/adc_nav_bt_module.h +++ /dev/null @@ -1,650 +0,0 @@ -#ifndef _IRI_ADC_NAV_MODULE_BT_H -#define _IRI_ADC_NAV_MODULE_BT_H - -#include <iri_base_algorithm/iri_base_algorithm.h> - -#include "iri_bt_factory.h" -#include <adc_nav_module/adc_nav_module.h> - -class CADCNavModuleBT -{ - private: - // object of adc_nav_module - CADCNavModule adc_nav_module; - - public: - /** - * \brief Constructor - * - */ - CADCNavModuleBT(); - - /** - * \brief Constructor with module name. - * - * \param module_name The module name. - * - */ - CADCNavModuleBT(std::string &module_name); - - /** - * \brief Register all conditions and actions needed for using the module - * - * This function registers all conditions and actions needed for using the module - * to the factory provided including all input and output ports required - * by actions. - * - * \param factory (IriBehaviorTreeFactory) - * - */ - void init(IriBehaviorTreeFactory &factory); - - /** - * \brief Destructor - * - * This destructor frees all necessary dynamic memory allocated within this - * this class. - */ - ~CADCNavModuleBT(); - - protected: - - /** - * \brief Synchronized go_to_pose adc nav function. - * - * This function calls go_to_pose of adc_nav_module. As this is a - * synchronous action is_adc_nav_finished() must be used to know when the action - * has actually finished. - * - * It has the following input ports: - * - * x (double): desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * y (double): desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * yaw (double): desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * heading_tol (double): [Optional] heading tolerance for the goal. - * - * x_y_pos_tol (double): [Optional] position tolerance for the goal. - * - * \param self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus sync_adc_nav_go_to_pose(BT::TreeNode& self); - - /** - * \brief Async go_to_pose adc nav function. - * - * This function calls go_to_pose of adc_nav_module. As this is - * an asynchronous action is_adc_nav_finished() is checked to know when the action - * has actually finished. - * - * It has the following input ports: - * - * x (double): desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * y (double): desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * yaw (double): desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * heading_tol (double): [Optional] heading tolerance for the goal. - * - * x_y_pos_tol (double): [Optional] position tolerance for the goal. - * - * It also has a bidirectional port: - * - * new_goal (bool): If it's a new_goal. - * - * \param self node with the required inputs defined as follows: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull and the action has finished (BT:NodeStatus::SUCCESS) or the - * request has been unsuccessfull (BT:NodeStatus::FAILURE) or it is still - * in progress (BT:NodeStatus::RUNNING). If inputs are missing or incorrect - * it also returns BT:NodeStatus::FAILURE - * - */ - BT::NodeStatus async_adc_nav_go_to_pose(BT::TreeNode& self); - - /** - * \brief Synchronized go_to_orientation adc nav function. - * - * This function calls go_to_orientation of adc_nav_module. As this is a - * synchronous action is_adc_nav_finished() must be used to know when the action - * has actually finished. - * - * It has the following input ports: - * - * yaw (double): desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * heading_tol (double): [Optional] heading tolerance for the goal. - * - * \param self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus sync_adc_nav_go_to_orientation(BT::TreeNode& self); - - /** - * \brief Async go_to_orientation adc nav function. - * - * This function calls go_to_orientation of adc_nav_module. As this is - * an asynchronous action is_adc_nav_finished() is checked to know when the action - * has actually finished. - * - * It has the following input ports: - * - * yaw (double): desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * heading_tol (double): [Optional] heading tolerance for the goal. - * - * It also has a bidirectional port: - * - * new_goal (bool): If it's a new_goal. - * - * \param self node with the required inputs defined as follows: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull and the action has finished (BT:NodeStatus::SUCCESS) or the - * request has been unsuccessfull (BT:NodeStatus::FAILURE) or it is still - * in progress (BT:NodeStatus::RUNNING). If inputs are missing or incorrect - * it also returns BT:NodeStatus::FAILURE - * - */ - BT::NodeStatus async_adc_nav_go_to_orientation(BT::TreeNode& self); - - /** - * \brief Synchronized go_to_position adc nav function. - * - * This function calls go_to_position of adc_nav_module. As this is a - * synchronous action is_adc_nav_finished() must be used to know when the action - * has actually finished. - * - * It has the following input ports: - * - * x (double): desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * y (double): desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * x_y_pos_tol (double): [Optional] position tolerance for the goal. - * - * \param self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus sync_adc_nav_go_to_position(BT::TreeNode& self); - - /** - * \brief Async go_to_position adc nav function. - * - * This function calls go_to_position of adc_nav_module. As this is - * an asynchronous action is_adc_nav_finished() is checked to know when the action - * has actually finished. - * - * It has the following input ports: - * - * x (double): desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * y (double): desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * x_y_pos_tol (double): [Optional] position tolerance for the goal. - * - * It also has a bidirectional port: - * - * new_goal (bool): If it's a new_goal. - * - * \param self node with the required inputs defined as follows: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull and the action has finished (BT:NodeStatus::SUCCESS) or the - * request has been unsuccessfull (BT:NodeStatus::FAILURE) or it is still - * in progress (BT:NodeStatus::RUNNING). If inputs are missing or incorrect - * it also returns BT:NodeStatus::FAILURE - * - */ - BT::NodeStatus async_adc_nav_go_to_position(BT::TreeNode& self); - - /** - * \brief Synchronized set_adc_nav_goal_frame adc nav function. - * - * This function calls set_adc_nav_goal_frame of adc_nav_module. - * - * It has the following input ports: - * - * frame_id (std::string): name of the new reference frame for the future goals. - * This frame can be any that exist inside the TF tree - * of the robot. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus set_adc_nav_goal_frame(BT::TreeNode& self); - - /** - * \brief Synchronized costmaps_clear adc nav function. - * - * This function calls costmaps_clear of adc_nav_module. - * - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_costmaps_clear(void); - - /** - * \brief Synchronized costmaps_enable_auto_clear adc nav function. - * - * This function calls costmaps_enable_auto_clear of adc_nav_module. - * - * It has the following input ports: - * - * rate_hz (double): the desired clearing rate in Hz. This value should be less - * than 1 Hz, normally in the range of 0.1 to 0.01 Hz. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_costmaps_enable_auto_clear(BT::TreeNode& self); - - /** - * \brief Synchronized costmaps_disable_auto_clear adc nav function. - * - * This function calls costmaps_disable_auto_clear of adc_nav_module. - * - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_costmaps_disable_auto_clear(void); - - /** - * \brief Synchronized set_parameter adc nav function. - * - * This function calls set_parameter of adc_nav_module. - * - * It has the following input ports: - * - * name_space (std::string): String with the parameter name space. - * - * name (std::string): String with the name of the parameter to change. This must - * coincide with a parameter name on the associated dynamic - * reconfigure server. - * - * value (bool): the new value for the parameter. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_set_bool_parameter(BT::TreeNode& self); - - /** - * \brief Synchronized set_parameter adc nav function. - * - * This function calls set_parameter of adc_nav_module. - * - * It has the following input ports: - * - * name_space (std::string): String with the parameter name space. - * - * name (std::string): String with the name of the parameter to change. This must - * coincide with a parameter name on the associated dynamic - * reconfigure server. - * - * value (int): the new value for the parameter. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_set_int_parameter(BT::TreeNode& self); - - /** - * \brief Synchronized set_parameter adc nav function. - * - * This function calls set_parameter of adc_nav_module. - * - * It has the following input ports: - * - * name_space (std::string): String with the parameter name space. - * - * name (std::string): String with the name of the parameter to change. This must - * coincide with a parameter name on the associated dynamic - * reconfigure server. - * - * value (std::string): the new value for the parameter. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_set_string_parameter(BT::TreeNode& self); - - /** - * \brief Synchronized set_parameter adc nav function. - * - * This function calls set_parameter of adc_nav_module. - * - * It has the following input ports: - * - * name_space (std::string): String with the parameter name space. - * - * name (std::string): String with the name of the parameter to change. This must - * coincide with a parameter name on the associated dynamic - * reconfigure server. - * - * value (double): the new value for the parameter. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus adc_nav_set_double_parameter(BT::TreeNode& self); - - /** - * \brief Synchronized getCurrentPose adc nav function. - * - * This function calls getCurrentPose of adc_nav_module. - * - * It has the following output ports: - * - * pose (geometry_msgs::Pose): current pose. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus get_adc_nav_current_pose(BT::TreeNode& self); - - /** - * \brief Synchronized getGoalDistance adc nav function. - * - * This function calls getGoalDistance of adc_nav_module. - * - * It has the following output ports: - * - * distance (double): current distance to goal. - * - * \param self Self node with the required ports: - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus get_adc_nav_goal_distance(BT::TreeNode& self); - - /** - * \brief Synchronized stop adc nav function. - * - * This function calls stop of adc_nav_module. As this is a - * synchronous action is_adc_nav_finished() must be used to know when the action - * has actually finished. - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * If inputs are missing or incorrect it also returns BT:NodeStatus::FAILURE. - * - */ - BT::NodeStatus sync_cancel_adc_nav_action(void); - - /** - * \brief Async stop adc nav function. - * - * This function calls stop of adc_nav_module. As this is - * an asynchronous action is_adc_nav_finished() is checked to know when the action - * has actually finished. - * - * \return a BT:NodeStatus indicating whether the request has been - * successfull and the action has finished (BT:NodeStatus::SUCCESS) or the - * request has been unsuccessfull (BT:NodeStatus::FAILURE) or it is still - * in progress (BT:NodeStatus::RUNNING). If inputs are missing or incorrect - * it also returns BT:NodeStatus::FAILURE - * - */ - BT::NodeStatus async_cancel_adc_nav_action(void); - - /** - * \brief Checks if the module is idle and there isn't any new movement request. - * - * This function must be used when any sync action is called. - * - * \return a BT:NodeStatus indicating whether the last movement has - * ended (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE), - * regardless of its success or not. - * - */ - BT::NodeStatus is_adc_nav_finished(void); - - /** - * \brief Checks if the module is idle and there isn't any new movement request. - * - * This function must be used when any sync action is called and - * a BT timeout is used. - * - * \return a BT:NodeStatus indicating whether the last movement has - * ended (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::RUNNING), - * regardless of its success or not. - * - */ - BT::NodeStatus async_is_adc_nav_finished(void); - - ///adc nav module status - /** - * \brief Checks if the module is active and operating properly. - * - * This function must be used to know whether the module is active and - * operating properly, or not. - * - * \return a BT:NodeStatus indicating whether the module is active and - * operating properly (BT:NodeStatus::SUCCESS) or not (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_running(void); - - /** - * \brief Checks if the last action goal has been reached successfully. - * - * This function must be used to know whether the last action goal has - * been reached successfully or not, once it has finished. - * - * \return a BT:NodeStatus indicating whether the last action goal has - * been reached successfully (BT:NodeStatus::SUCCESS) or not - * (BT:NodeStatus::FAILURE), regardless of how it has failed. - * - */ - BT::NodeStatus is_adc_nav_module_success(void); - - /** - * \brief Checks if the goal could not be started. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * goal could not be started. - * - * \return a BT:NodeStatus indicating whether the goal could not be started - * (BT:NodeStatus::SUCCESS) or if it failed due to another reason - * (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_action_start_fail(void); - - /** - * \brief Checks if the goal did not complete in the allowed time. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * goal did not complete in the allowed time. - * - * \return a BT:NodeStatus indicating whether the goal did not complete in - * the allowed time (BT:NodeStatus::SUCCESS) or if it failed due to another - * reason (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_timeout(void); - - /** - * \brief Checks if the feedback has not been received for a long time. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * feedback has not been received for a long time. - * - * \return a BT:NodeStatus indicating whether the feedback has not been - * received for a long time (BT:NodeStatus::SUCCESS) or if it failed due - * to another reason (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_fb_watchdog(void); - - /** - * \brief Checks if the action goal could not be reached. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * action goal could not be reached. - * - * \return a BT:NodeStatus indicating whether the action goal could not - * be reached (BT:NodeStatus::SUCCESS) or if it failed due to another - * reason (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_aborted(void); - - /** - * \brief Checks if the current action goal has been cancelled by - * another goal. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * current action goal has been cancelled by another goal. - * - * \return a BT:NodeStatus indicating whether the current action goal - * has been cancelled by another goal (BT:NodeStatus::SUCCESS) or if it - * failed due to another reason (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_preempted(void); - - /** - * \brief Checks if the goal information is not valid. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * goal information is not valid and the goal will not be executed. - * - * \return a BT:NodeStatus indicating whether the goal information is not - * valid (BT:NodeStatus::SUCCESS) or if it failed due to another reason - * (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_rejected(void); - - /** - * \brief Checks if set_param function has failed. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because - * set_param function has failed. - * - * \return a BT:NodeStatus indicating whether the goal information is not - * valid (BT:NodeStatus::SUCCESS) or if it failed due to another reason - * (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_set_param_fail(void); - - /** - * \brief Checks if the requested parameter is not present. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * requested parameter is not present. - * - * \return a BT:NodeStatus indicating whether the goal information is not - * valid (BT:NodeStatus::SUCCESS) or if it failed due to another reason - * (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_param_not_present(void); - - /** - * \brief Checks if no odom messages have been received on a while. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because - * no odom messages have been received on a while. - * - * \return a BT:NodeStatus indicating whether the goal information is not - * valid (BT:NodeStatus::SUCCESS) or if it failed due to another reason - * (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_no_odom(void); - - /** - * \brief Checks if the requested transform does not exist. - * - * This function must be used to know the type of failure, once the last - * goal has finished. Specifically, it checks if it failed because the - * requested transform does not exist. - * - * \return a BT:NodeStatus indicating whether the goal information is not - * valid (BT:NodeStatus::SUCCESS) or if it failed due to another reason - * (BT:NodeStatus::FAILURE). - * - */ - BT::NodeStatus is_adc_nav_module_no_transform(void); - }; - - #endif diff --git a/include/iri_adc_nav_module/adc_nav_module.h b/include/iri_adc_nav_module/adc_nav_module.h deleted file mode 100644 index 032a20b..0000000 --- a/include/iri_adc_nav_module/adc_nav_module.h +++ /dev/null @@ -1,262 +0,0 @@ -#ifndef _ADC_NAV_MODULE_H -#define _ADC_NAV_MODULE_H - -// IRI ROS headers -#include <iri_adc_nav_module/nav_module.h> -#include <iri_adc_nav_module/ackermann_lp_module.h> -#include <iri_adc_nav_module/opendrive_gp_module.h> - -// Dynamic reconfigure header -#include <iri_adc_nav_module/ADCNavModuleConfig.h> - -//States -typedef enum {ADC_NAV_MODULE_IDLE, - ADC_NAV_MODULE_TRANSFORM, - ADC_NAV_MODULE_START, - ADC_NAV_MODULE_WAIT} adc_nav_module_state_t; - -//Status -/** - * \brief Possible module status returned by the get_status() function - * - * These are the possible status of the module, which are: - * * ADC_NAV_MODULE_RUNNING: indicates that the module is active and operating - * properly. - * * ADC_NAV_MODULE_SUCCESS: indicates the last navigation goal has been reached - * successfully. - * * ADC_NAV_MODULE_ACTION_START_FAIL: indicates that the goal could not be started. - * * ADC_NAV_MODULE_TIMEOUT: indicates that the goal did not complete in the - * allowed time. - * * ADC_NAV_MODULE_FB_WATCHDOG: indicates that feedback has not been received for - * a long time. - * * ADC_NAV_MODULE_ABORTED: indicates that the navigation goal could not be reached. - * * ADC_NAV_MODULE_PREEMPTED: indicates that the current navigation goal has been - * canceled by another goal. - * * ADC_NAV_MODULE_REJECTED: indicates that the goal informatio is not valid and the - * goal will not be executed. - * * ADC_NAV_MODULE_SET_PARAM_FAIL: indicates that it was impossible to set the value - * of a parameter. - * * ADC_NAV_MODULE_PARAM_NOT_PRESENT: indicates that the parameter to be changed is - * not present in the remote node. - * * ADC_NAV_MODULE_NO_ODOM: indicates that no odometry information is being received, - * so it is not possible to get the current position of the - * robot. - * * ADC_NAV_MODULE_NO_TRANSFORM: indicates that there exist no transform between the - * desired goal frame and the rest of the TF tree. - */ -typedef enum {ADC_NAV_MODULE_RUNNING, - ADC_NAV_MODULE_SUCCESS, - ADC_NAV_MODULE_ACTION_START_FAIL, - ADC_NAV_MODULE_TIMEOUT, - ADC_NAV_MODULE_FB_WATCHDOG, - ADC_NAV_MODULE_ABORTED, - ADC_NAV_MODULE_PREEMPTED, - ADC_NAV_MODULE_REJECTED, - ADC_NAV_MODULE_SET_PARAM_FAIL, - ADC_NAV_MODULE_PARAM_NOT_PRESENT, - ADC_NAV_MODULE_NO_ODOM, - ADC_NAV_MODULE_NO_TRANSFORM} adc_nav_module_status_t; - -#define DEFAULT_HEADING_TOL -1.0 -#define IGNORE_HEADING 3.14159 -#define DEFAULT_X_Y_POS_TOL -1.0 -#define IGNORE_X_Y_POS 100.0 - -/** - * \brief - * - */ -class CADCNavModule : public CNavModule<iri_adc_nav_module::ADCNavModuleConfig>, - public CAckermannLPModule<iri_adc_nav_module::ADCNavModuleConfig>, - public COpendriveGPModule<iri_adc_nav_module::ADCNavModuleConfig> -{ - private: - iri_adc_nav_module::ADCNavModuleConfig config; - //Variables - /** - * \brief - * - */ - adc_nav_module_state_t state; - /** - * \brief - * - */ - adc_nav_module_status_t status; - /** - * \brief - * - */ - bool new_goal; - /** - * \brief - * - */ - double goal_x; - /** - * \brief - * - */ - double goal_y; - /** - * \brief - * - */ - double goal_yaw; - /** - * \brief - * - */ - bool cancel_pending; - - protected: - /** - * \brief - * - */ - void state_machine(void); - /** - * \brief - * - */ - void reconfigure_callback(iri_adc_nav_module::ADCNavModuleConfig &config, uint32_t level); - public: - /** - * \brief Constructor - * - */ - CADCNavModule(const std::string &name,const std::string &name_space=std::string("")); - // basic navigation functions - /** - * \brief Navigate to a given orientation (theta) - * - * This functions rotates the robot about its axis to the given orientation - * with respect to the reference frame set by the set_goal_frame() function. - * The current position of the robot is taken from the odometry of the robot. - * - * If the local planner supports it, it is possible to set the desired - * heading goal tolerance. By default, the default tolerance of the planner - * is used. If the planner does not support changing the goal tolerance, this - * function will fail if any tolerance other than DEFAULT_HEADING_TOL is - * used. - * - * This function may fail for the following reasons: - * * The heading tolerance parameter does not exist in the local planner. - * * The heading tolerance exists but it could not be set to the desired - * value. - * - * \param yaw desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * \param heading_tol heading tolerance for the goal. By default it is set to - * -1, which means to use the default planner tolerance. - * - * \return a boolean indicating wheather the request has been successfull (true) - * or not (false). - */ - bool go_to_orientation(double yaw,double heading_tol=DEFAULT_HEADING_TOL); - /** - * \brief Navigate to a given position (x,y) - * - * This functions moves the robot to the given position preserving the final - * orientation with respect to the reference frame set by the set_goal_frame() - * function. The current orientation of the robot is taken from the odometry - * of the robot. - * - * If the local planner supports it, it is possible to set the desired - * position goal tolerance. By default, the default tolerance of the planner - * is used. If the planner does not support changing the goal tolerance, this - * function will fail if any tolerance other than DEFAULT_X_Y_POS_TOL is - * used. - * - * This function may fail for the following reasons: - * * The position tolerance parameter does not exist in the local planner. - * * The position tolerance exists but it could not be set to the desired - * value. - * - * \param x desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * \param y desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * \param x_y_pos_tol position tolerance for the goal. By default it is set to - * -1, which means to use the default planner tolerance. - * - * \return a boolean indicating wheather the request has been successfull (true) - * or not (false). - */ - bool go_to_position(double x,double y,double x_y_pos_tol=DEFAULT_X_Y_POS_TOL); - /** - * \brief Navigate to a given pose (x,y,theta) - * - * This functions moves the robot to the given pose preserving with respect - * to the reference frame set by the set_goal_frame() function. - * - * If the local planner supports it, it is possible to set the desired - * pose goal tolerance. By default, the default tolerance of the planner - * is used. If the planner does not support changing the goal tolerance, this - * function will fail if any tolerance other than DEFAULT_X_Y_POS_TOL and - * DEFAULT_HEADING_TOL are used. - * - * This function may fail for the following reasons: - * * The position and/or heading tolerance parameter do not exist in the - * local planner. - * * The position and/or heading tolerance exists but it could not be set - * to the desired value. - * - * \param x desired X positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * \param y desired Y positon with respect to the goal frame set by the - * set_goal_frame() function. - * - * \param yaw desired orientation with respect to the goal frame set by the - * set_goal_frame() function. - * - * \param heading_tol heading tolerance for the goal. By default it is set to - * -1, which means to use the default planner tolerance. - * \param x_y_pos_tol position tolerance for the goal. By default it is set to - * -1, which means to use the default planner tolerance. - * - * \return a boolean indicating wheather the request has been successfull (true) - * or not (false). - */ - bool go_to_pose(double x,double y,double yaw,double heading_tol=DEFAULT_HEADING_TOL,double x_y_pos_tol=DEFAULT_X_Y_POS_TOL); - /** - * \brief Stops the current goal - * - * This functions stops the motion of the robot, whatever the type of goal - * that has been given. This functions signals the stop to the navigation - * module, but the is_finished() function must be used to know when the - * navigation is actually stopped. - */ - void stop(void); - /** - * \brief Checks if the last goal has finished or not. - * - * This function must be used to know when the last navigation goal has - * ended, either successfully or by any error. - * - * \return a boolean indicating whether the last navigation goal has ended - * (true) or not (false), reagardless of its success or not. - */ - bool is_finished(void); - /** - * \brief Returns the current state - * - * This function returns the current status of the navigation module. It returns - * one of the adc_nav_module_status_t values. This can be called at any time, but is - * has only meaning when a goal has just finished. - * - * \return the current status of the module. - */ - adc_nav_module_status_t get_status(void); - /** - * \brief Destructor - * - */ - ~CADCNavModule(); - }; - - #endif diff --git a/include/iri_adc_nav_module/ackermann_lp_module.h b/include/iri_nav_module/ackermann_lp_module.h similarity index 99% rename from include/iri_adc_nav_module/ackermann_lp_module.h rename to include/iri_nav_module/ackermann_lp_module.h index 4078439..ec50306 100644 --- a/include/iri_adc_nav_module/ackermann_lp_module.h +++ b/include/iri_nav_module/ackermann_lp_module.h @@ -2,7 +2,7 @@ #define _ACKERMANN_LP_MODULE_H // IRI ROS headers -#include <iri_adc_nav_module/nav_planner_module.h> +#include <iri_nav_module/nav_planner_module.h> /** * \brief diff --git a/include/iri_adc_nav_module/nav_costmap_module.h b/include/iri_nav_module/nav_costmap_module.h similarity index 90% rename from include/iri_adc_nav_module/nav_costmap_module.h rename to include/iri_nav_module/nav_costmap_module.h index 5a54854..36bea84 100644 --- a/include/iri_adc_nav_module/nav_costmap_module.h +++ b/include/iri_nav_module/nav_costmap_module.h @@ -2,6 +2,7 @@ #define _NAV_COSTMAP_MODULE_H #include <geometry_msgs/Point.h> +#include <costmap_2d/footprint.h> // IRI ROS headers #include <iri_ros_tools/module_dyn_reconf.h> @@ -167,13 +168,34 @@ class CNavCostmapModule template <class ModuleCfg> dyn_reconf_status_t CNavCostmapModule<ModuleCfg>::get_footprint(std::vector<geometry_msgs::Point> &footprint) { + std::string footprint_string; + if(this->costmap_reconf.get_parameter("footprint",footprint_string)) + { + if(costmap_2d::makeFootprintFromString(footprint_string,footprint)) + return DYN_RECONF_SUCCESSFULL; + else + return DYN_RECONF_NO_SUCH_PARAM; + } + else + return DYN_RECONF_NO_SUCH_PARAM; } template <class ModuleCfg> dyn_reconf_status_t CNavCostmapModule<ModuleCfg>::set_footprint(std::vector<geometry_msgs::Point> &footprint) { + std::stringstream footprint_string; + footprint_string << "["; + for(unsigned int i=0;i<footprint.size();i++) + { + footprint_string << "[" << footprint[i].x << "," << footprint[i].y << "]"; + if(i<footprint.size()-1) + std::cout << ","; + } + footprint_string << "]"; + this->costmap_reconf.set_parameter("footprint",footprint_string.str()); + return this->costmap_reconf.get_status(); } template <class ModuleCfg> diff --git a/include/iri_adc_nav_module/nav_module.h b/include/iri_nav_module/nav_module.h similarity index 99% rename from include/iri_adc_nav_module/nav_module.h rename to include/iri_nav_module/nav_module.h index 40c2404..02f3732 100644 --- a/include/iri_adc_nav_module/nav_module.h +++ b/include/iri_nav_module/nav_module.h @@ -20,7 +20,7 @@ #include <move_base_msgs/MoveBaseAction.h> #include <std_srvs/Empty.h> -#include <iri_adc_nav_module/nav_costmap_module.h> +#include <iri_nav_module/nav_costmap_module.h> /** * \brief Navigation module diff --git a/include/iri_adc_nav_module/nav_planner_module.h b/include/iri_nav_module/nav_planner_module.h similarity index 100% rename from include/iri_adc_nav_module/nav_planner_module.h rename to include/iri_nav_module/nav_planner_module.h diff --git a/include/iri_adc_nav_module/opendrive_gp_module.h b/include/iri_nav_module/opendrive_gp_module.h similarity index 99% rename from include/iri_adc_nav_module/opendrive_gp_module.h rename to include/iri_nav_module/opendrive_gp_module.h index b161d82..bb4d4ee 100644 --- a/include/iri_adc_nav_module/opendrive_gp_module.h +++ b/include/iri_nav_module/opendrive_gp_module.h @@ -3,7 +3,7 @@ // IRI ROS headers #include <iri_ros_tools/module_service.h> -#include <iri_adc_nav_module/nav_planner_module.h> +#include <iri_nav_module/nav_planner_module.h> #include <nav_msgs/OccupancyGrid.h> #include <iri_adc_msgs/get_opendrive_map.h> #include <iri_adc_msgs/get_opendrive_nodes.h> diff --git a/launch/adc_nav_bt_client.launch b/launch/adc_nav_bt_client.launch deleted file mode 100644 index 711ddb6..0000000 --- a/launch/adc_nav_bt_client.launch +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<launch> - <arg name="node_name" default="nav_client" /> - <arg name="output" default="screen" /> - <arg name="launch_prefix" default="" /> - <arg name="config_file" default="$(find tiago_nav_module)/config/tiago_nav_module_default.yaml" /> - <arg name="move_base_action" default="/move_base"/> - <arg name="move_poi_action" default="/poi_navigation_server/go_to_poi"/> - <arg name="move_waypoint_action" default="/pal_waypoint/navigate"/> - <arg name="odom_topic" default="/mobile_base_controller/odom"/> - <arg name="path_topic" default="/move_base/GlobalPlanner/plan"/> - <arg name="clear_costmaps_service" default="/move_base/clear_costmaps"/> - <arg name="change_map_service" default="/pal_map_manager/change_map"/> - <arg name="set_op_mode_service" default="/pal_navigation_sm"/> - <arg name="move_base_dyn_reconf" default="/move_base/PalLocalPlanner/set_parameters"/> - - <arg name="tree_path" default="$(find tiago_nav_module)/src/xml" /> - <arg name="tree_file" default="bt_test" /> - <arg name="bt_client_rate" default="10" /> - - <!-- launch the play motion client node --> - <node name="$(arg node_name)" - pkg="tiago_nav_module" - type="tiago_nav_bt_client" - output="$(arg output)" - launch-prefix="$(arg launch_prefix)"> - <remap from="~/tiago_nav_module/move_base" - to="$(arg move_base_action)"/> - <remap from="~/tiago_nav_module/move_poi" - to="$(arg move_poi_action)"/> - <remap from="~/tiago_nav_module/move_waypoint" - to="$(arg move_waypoint_action)"/> - <remap from="~/tiago_nav_module/odom" - to="$(arg odom_topic)"/> - <remap from="~/tiago_nav_module/path" - to="$(arg path_topic)"/> - <remap from="~/tiago_nav_module/clear_costmaps" - to="$(arg clear_costmaps_service)"/> - <remap from="~/tiago_nav_module/change_map" - to="$(arg change_map_service)"/> - <remap from="~/tiago_nav_module/set_op_mode" - to="$(arg set_op_mode_service)"/> - <remap from="~/tiago_nav_module/move_base_reconf" - to="$(arg move_base_dyn_reconf)"/> - - <rosparam file="$(arg config_file)" command="load" ns="tiago_nav_module" /> - <param name="path" value="$(arg tree_path)"/> - <param name="tree_xml_file" value="$(arg tree_file)"/> - <param name="bt_client_rate" value="$(arg bt_client_rate)"/> - </node> - - <!-- launch dynamic reconfigure --> - <node name="rqt_reconfigure" pkg="rqt_reconfigure" type="rqt_reconfigure" respawn="false" - output="screen"/> - -</launch> - diff --git a/launch/adc_nav_client.launch b/launch/adc_nav_client.launch deleted file mode 100644 index 1e196dc..0000000 --- a/launch/adc_nav_client.launch +++ /dev/null @@ -1,59 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<launch> - <arg name="node_name" default="nav_client" /> - <arg name="output" default="screen" /> - <arg name="launch_prefix" default="" /> - <arg name="config_file" default="$(find iri_adc_nav_module)/config/adc_nav_module_default.yaml" /> - <arg name="move_base_action" default="/adc_car/move_base"/> - <arg name="odom_topic" default="/adc_car/local_odom_combined"/> - <arg name="path_topic" default="/adc_car/move_base/OpendriveGlobalPlanner/plan"/> - <arg name="clear_costmaps_service" default="/adc_car/move_base/clear_costmaps"/> - <arg name="make_plan_service" default="/adc_car/move_base/make_plan"/> - <arg name="move_base_dyn_reconf" default="/adc_car/move_base/set_parameters"/> - <arg name="local_costmap_dyn_reconf" default="/adc_car/move_base/local_costmap/set_parameters"/> - <arg name="local_planner_dyn_reconf" default="/adc_car/move_base/AckermannPlannerROS/set_parameters"/> - <arg name="global_costmap_dyn_reconf" default="/adc_car/move_base/global_costmap/set_parameters"/> - <arg name="global_planner_dyn_reconf" default="/adc_car/move_base/OpendriveGlobalPlanner/set_parameters"/> - <arg name="get_opendrive_map_service" default="/adc_car/move_base/OpendriveGlobalPlanner/get_opendrive_map"/> - <arg name="get_opendrive_nodes_service" default="/adc_car/move_base/OpendriveGlobalPlanner/get_opendrive_nodes"/> - - <!-- launch the play motion client node --> - <node name="$(arg node_name)" - pkg="iri_adc_nav_module" - type="adc_nav_client" - output="$(arg output)" - launch-prefix="$(arg launch_prefix)"> - <remap from="~/nav_module/move_base" - to="$(arg move_base_action)"/> - <remap from="~/nav_module/odom" - to="$(arg odom_topic)"/> - <remap from="~/nav_module/path" - to="$(arg path_topic)"/> - <remap from="~/nav_module/clear_costmaps" - to="$(arg clear_costmaps_service)"/> - <remap from="~/nav_module/make_plan" - to="$(arg make_plan_service)"/> - <remap from="~/nav_module/move_base_reconf" - to="$(arg move_base_dyn_reconf)"/> - <remap from="~/nav_module/local_costmap/dyn_reconf" - to="$(arg local_costmap_dyn_reconf)"/> - <remap from="~/nav_module/local_planner/dyn_reconf" - to="$(arg local_planner_dyn_reconf)"/> - <remap from="~/nav_module/global_costmap/dyn_reconf" - to="$(arg global_costmap_dyn_reconf)"/> - <remap from="~/nav_module/global_planner/dyn_reconf" - to="$(arg global_planner_dyn_reconf)"/> - <remap from="~/nav_module/global_planner/get_map" - to="$(arg get_opendrive_map_service)"/> - <remap from="~/nav_module/global_planner/get_nodes" - to="$(arg get_opendrive_nodes_service)"/> - - <rosparam file="$(arg config_file)" command="load" ns="nav_module" /> - </node> - - <!-- launch dynamic reconfigure --> - <node name="rqt_reconfigure" pkg="rqt_reconfigure" type="rqt_reconfigure" respawn="false" - output="screen"/> - -</launch> - diff --git a/package.xml b/package.xml index 16998b7..7278ca1 100644 --- a/package.xml +++ b/package.xml @@ -1,8 +1,8 @@ <?xml version="1.0"?> <package> - <name>iri_adc_nav_module</name> + <name>iri_nav_module</name> <version>0.0.0</version> - <description>Module iri_adc_nav_module package</description> + <description>Module iri_nav_module package</description> <!-- One maintainer tag required, multiple allowed, one person per tag --> <!-- Example: --> @@ -49,9 +49,8 @@ <build_depend>nav_msgs</build_depend> <build_depend>tf2_ros</build_depend> <build_depend>iri_base_algorithm</build_depend> - <build_depend>iri_base_bt_client</build_depend> - <build_depend>iri_behaviortree</build_depend> <build_depend>iri_adc_msgs</build_depend> + <build_depend>costmap_2d</build_depend> <!-- new dependencies --> <!--<build_depend>new build dependency</build_depend>--> <run_depend>iri_ros_tools</run_depend> @@ -63,9 +62,8 @@ <run_depend>nav_msgs</run_depend> <run_depend>tf2_ros</run_depend> <run_depend>iri_base_algorithm</run_depend> - <run_depend>iri_base_bt_client</run_depend> - <run_depend>iri_behaviortree</run_depend> <run_depend>iri_adc_msgs</run_depend> + <run_depend>costmap_2d</run_depend> <!-- new dependencies --> <!--<run_depend>new run dependency</run_depend>--> diff --git a/setup.py b/setup.py index ff212ab..179fd22 100644 --- a/setup.py +++ b/setup.py @@ -2,7 +2,7 @@ from distutils.core import setup from catkin_pkg.python_setup import generate_distutils_setup d = generate_distutils_setup( - packages=['iri_adc_nav_module'], + packages=['iri_nav_module'], package_dir={'': 'src'} ) setup(**d) diff --git a/src/adc_nav_bt_client_alg_node.cpp b/src/adc_nav_bt_client_alg_node.cpp deleted file mode 100644 index d1e80a4..0000000 --- a/src/adc_nav_bt_client_alg_node.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "adc_nav_bt_client_alg_node.h" - -ADCNavModuleBtClientAlgNode::ADCNavModuleBtClientAlgNode(void) : - behaviortree_base::IriBaseBTClient<adc_nav_module::ADCNavBtClientConfig>(), - adc_nav_module_bt() -{ - // [init publishers] - - // [init subscribers] - - // [init services] - - // [init clients] - - // [init action servers] - - // [init action clients] - - this->set_go_to_pose = false; - this->adc_nav_module_bt.init(this->factory); - - // Init local functions - BT::PortsList async_go_to_pose_inputs_ports = {BT::OutputPort<double>("x"), BT::OutputPort<double>("y"), BT::OutputPort<double>("yaw"), BT::OutputPort<double>("heading_tol"), BT::OutputPort<double>("x_y_pos_tol"), BT::OutputPort<bool>("new_goal")}; - BT::PortsList set_goal_frame_inputs_ports = {BT::OutputPort<std::string>("frame_id")}; - - this->factory.registerIriAsyncAction("set_adc_nav_go_to_pose_inputs", std::bind(&ADCNavModuleBtClientAlgNode::set_adc_nav_go_to_pose_inputs, this, std::placeholders::_1), async_go_to_pose_inputs_ports); - this->factory.registerIriAsyncAction("set_adc_nav_goal_frame_inputs", std::bind(&ADCNavModuleBtClientAlgNode::set_adc_nav_goal_frame_inputs, this, std::placeholders::_1), set_goal_frame_inputs_ports); - -} - -ADCNavModuleBtClientAlgNode::~ADCNavModuleBtClientAlgNode(void) -{ - // [free dynamic memory] -} - -/* [subscriber callbacks] */ - -/* [service callbacks] */ - -/* [action callbacks] */ - -/* [action requests] */ - - -void ADCNavModuleBtClientAlgNode::node_config_update(adc_nav_module::ADCNavBtClientConfig &config, uint32_t level) -{ - this->lock(); - - if(config.START) - { - this->core.start_tree(); - config.START=false; - } - - if(config.RESTART) - { - this->core.stop_tree(); - config.RESTART=false; - } - - if (config.set_go_to_input) - { - this->set_go_to_pose = true; - config.set_go_to_input = false; - } - - this->config_=config; - this->unlock(); -} - -BT::NodeStatus ADCNavModuleBtClientAlgNode::set_adc_nav_go_to_pose_inputs(BT::TreeNode& self) -{ - if (this->set_go_to_pose) - { - this->set_go_to_pose = false; - self.setOutput("x", this->config_.mb_x_pos); - self.setOutput("y", this->config_.mb_y_pos); - self.setOutput("yaw", this->config_.mb_yaw); - self.setOutput("heading_tol", this->config_.mb_xy_tol); - self.setOutput("x_y_pos_tol", this->config_.mb_yaw_tol); - self.setOutput("new_goal", true); - return BT::NodeStatus::SUCCESS; - } - return BT::NodeStatus::RUNNING; -} -BT::NodeStatus ADCNavModuleBtClientAlgNode::set_adc_nav_goal_frame_inputs(BT::TreeNode& self) -{ - if (this->set_go_to_pose) - { - // this->set_go_to_pose = false; - self.setOutput("frame_id", this->config_.mb_frame_id); - return BT::NodeStatus::SUCCESS; - } - return BT::NodeStatus::RUNNING; -} - -void ADCNavModuleBtClientAlgNode::addNodeDiagnostics(void) -{ -} - -/* main function */ -int main(int argc,char *argv[]) -{ - return behaviortree_base::main<ADCNavModuleBtClientAlgNode>(argc, argv, "adc_nav_module_bt_client_alg_node"); -} diff --git a/src/adc_nav_bt_module.cpp b/src/adc_nav_bt_module.cpp deleted file mode 100644 index f07c693..0000000 --- a/src/adc_nav_bt_module.cpp +++ /dev/null @@ -1,655 +0,0 @@ -#include <adc_nav_module/adc_nav_bt_module.h> -#include <adc_nav_module/adc_nav_module.h> - -CADCNavModuleBT::CADCNavModuleBT() : - adc_nav_module("adc_nav_module",ros::this_node::getName()) -{ - -} - -CADCNavModuleBT::CADCNavModuleBT(std::string &module_name) : - adc_nav_module(module_name,ros::this_node::getName()) -{ - -} - -void CADCNavModuleBT::init(IriBehaviorTreeFactory &factory) -{ - //Definition of ports - BT::PortsList sync_go_to_pose_ports = {BT::InputPort<double>("x"), BT::InputPort<double>("y"), BT::InputPort<double>("yaw"), BT::InputPort<double>("heading_tol"), BT::InputPort<double>("x_y_pos_tol")}; - BT::PortsList async_go_to_pose_ports = {BT::InputPort<double>("x"), BT::InputPort<double>("y"), BT::InputPort<double>("yaw"), BT::InputPort<double>("heading_tol"), BT::InputPort<double>("x_y_pos_tol"), BT::BidirectionalPort<bool>("new_goal")}; - BT::PortsList sync_go_to_orientation_ports = {BT::InputPort<double>("yaw"), BT::InputPort<double>("heading_tol")}; - BT::PortsList async_go_to_orientation_ports = {BT::InputPort<double>("yaw"), BT::InputPort<double>("heading_tol"), BT::BidirectionalPort<bool>("new_goal")}; - BT::PortsList sync_go_to_position_ports = {BT::InputPort<double>("x"), BT::InputPort<double>("y"), BT::InputPort<double>("x_y_pos_tol")}; - BT::PortsList async_go_to_position_ports = {BT::InputPort<double>("x"), BT::InputPort<double>("y"), BT::InputPort<double>("x_y_pos_tol"), BT::BidirectionalPort<bool>("new_goal")}; - BT::PortsList set_goal_frame_ports = {BT::InputPort<std::string>("frame_id")}; - - BT::PortsList auto_clear_ports = {BT::InputPort<double>("rate_hz")}; - BT::PortsList set_bool_parameter_ports = {BT::InputPort<std::string>("name_space"), BT::InputPort<std::string>("name"), BT::InputPort<bool>("value")}; - BT::PortsList set_int_parameter_ports = {BT::InputPort<std::string>("name_space"), BT::InputPort<std::string>("name"), BT::InputPort<int>("value")}; - BT::PortsList set_string_parameter_ports = {BT::InputPort<std::string>("name_space"), BT::InputPort<std::string>("name"), BT::InputPort<std::string>("value")}; - BT::PortsList set_double_parameter_ports = {BT::InputPort<std::string>("name_space"), BT::InputPort<std::string>("name"), BT::InputPort<double>("value")}; - BT::PortsList current_pose_ports = {BT::OutputPort<geometry_msgs::Pose>("pose")}; - BT::PortsList goal_distance_ports = {BT::OutputPort<double>("distance")}; - - - //Registration of conditions - factory.registerSimpleCondition("is_adc_nav_finished", std::bind(&CADCNavModuleBT::is_adc_nav_finished, this)); - - factory.registerSimpleCondition("is_adc_nav_module_running", std::bind(&CADCNavModuleBT::is_adc_nav_module_running, this)); - factory.registerSimpleCondition("is_adc_nav_module_success", std::bind(&CADCNavModuleBT::is_adc_nav_module_success, this)); - factory.registerSimpleCondition("is_adc_nav_module_action_start_fail", std::bind(&CADCNavModuleBT::is_adc_nav_module_action_start_fail, this)); - factory.registerSimpleCondition("is_adc_nav_module_timeout", std::bind(&CADCNavModuleBT::is_adc_nav_module_timeout, this)); - factory.registerSimpleCondition("is_adc_nav_module_fb_watchdog", std::bind(&CADCNavModuleBT::is_adc_nav_module_fb_watchdog, this)); - factory.registerSimpleCondition("is_adc_nav_module_aborted", std::bind(&CADCNavModuleBT::is_adc_nav_module_aborted, this)); - factory.registerSimpleCondition("is_adc_nav_module_preempted", std::bind(&CADCNavModuleBT::is_adc_nav_module_preempted, this)); - factory.registerSimpleCondition("is_adc_nav_module_rejected", std::bind(&CADCNavModuleBT::is_adc_nav_module_rejected, this)); - factory.registerSimpleCondition("is_adc_nav_module_set_param_fail", std::bind(&CADCNavModuleBT::is_adc_nav_module_set_param_fail, this)); - factory.registerSimpleCondition("is_adc_nav_module_param_not_present", std::bind(&CADCNavModuleBT::is_adc_nav_module_param_not_present, this)); - factory.registerSimpleCondition("is_adc_nav_module_no_odom", std::bind(&CADCNavModuleBT::is_adc_nav_module_no_odom, this)); - factory.registerSimpleCondition("is_adc_nav_module_no_transform", std::bind(&CADCNavModuleBT::is_adc_nav_module_no_transform, this)); - - //Registration of actions - factory.registerIriAsyncAction("async_is_adc_nav_finished", std::bind(&CADCNavModuleBT::async_is_adc_nav_finished, this)); - - factory.registerSimpleAction("sync_cancel_adc_nav_action", std::bind(&CADCNavModuleBT::sync_cancel_adc_nav_action, this)); - factory.registerSimpleAction("async_cancel_adc_nav_action", std::bind(&CADCNavModuleBT::async_cancel_adc_nav_action, this)); - - factory.registerSimpleAction("sync_adc_nav_go_to_pose", std::bind(&CADCNavModuleBT::sync_adc_nav_go_to_pose, this, std::placeholders::_1), sync_go_to_pose_ports); - factory.registerIriAsyncAction("async_adc_nav_go_to_pose", std::bind(&CADCNavModuleBT::async_adc_nav_go_to_pose, this, std::placeholders::_1), async_go_to_pose_ports); - factory.registerSimpleAction("sync_adc_nav_go_to_orientation", std::bind(&CADCNavModuleBT::sync_adc_nav_go_to_orientation, this, std::placeholders::_1), sync_go_to_orientation_ports); - factory.registerIriAsyncAction("async_adc_nav_go_to_orientation", std::bind(&CADCNavModuleBT::async_adc_nav_go_to_orientation, this, std::placeholders::_1), async_go_to_orientation_ports); - factory.registerSimpleAction("sync_adc_nav_go_to_position", std::bind(&CADCNavModuleBT::sync_adc_nav_go_to_position, this, std::placeholders::_1), sync_go_to_position_ports); - factory.registerIriAsyncAction("async_adc_nav_go_to_position", std::bind(&CADCNavModuleBT::async_adc_nav_go_to_position, this, std::placeholders::_1), async_go_to_position_ports); - factory.registerSimpleAction("set_adc_nav_goal_frame", std::bind(&CADCNavModuleBT::set_adc_nav_goal_frame, this, std::placeholders::_1), set_goal_frame_ports); - - factory.registerSimpleAction("adc_nav_costmaps_clear", std::bind(&CADCNavModuleBT::adc_nav_costmaps_clear, this)); - factory.registerSimpleAction("adc_nav_costmaps_enable_auto_clear", std::bind(&CADCNavModuleBT::adc_nav_costmaps_enable_auto_clear, this, std::placeholders::_1), auto_clear_ports); - factory.registerSimpleAction("adc_nav_costmaps_disable_auto_clear", std::bind(&CADCNavModuleBT::adc_nav_costmaps_disable_auto_clear, this)); - factory.registerSimpleAction("adc_nav_set_bool_parameter", std::bind(&CADCNavModuleBT::adc_nav_set_bool_parameter, this, std::placeholders::_1), set_bool_parameter_ports); - factory.registerSimpleAction("adc_nav_set_int_parameter", std::bind(&CADCNavModuleBT::adc_nav_set_int_parameter, this, std::placeholders::_1), set_int_parameter_ports); - factory.registerSimpleAction("adc_nav_set_string_parameter", std::bind(&CADCNavModuleBT::adc_nav_set_string_parameter, this, std::placeholders::_1), set_string_parameter_ports); - factory.registerSimpleAction("adc_nav_set_double_parameter", std::bind(&CADCNavModuleBT::adc_nav_set_double_parameter, this, std::placeholders::_1), set_double_parameter_ports); - factory.registerSimpleAction("get_adc_nav_current_pose", std::bind(&CADCNavModuleBT::get_adc_nav_current_pose, this, std::placeholders::_1), current_pose_ports); - factory.registerSimpleAction("get_adc_nav_goal_distance", std::bind(&CADCNavModuleBT::get_adc_nav_goal_distance, this, std::placeholders::_1), goal_distance_ports); -} - -CADCNavModuleBT::~CADCNavModuleBT(void) -{ - // [free dynamic memory] -} - -BT::NodeStatus CADCNavModuleBT::sync_adc_nav_go_to_pose(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::sync_adc_nav_go_to_pose-> sync_adc_nav_go_to_pose"); - BT::Optional<double> x = self.getInput<double>("x"); - BT::Optional<double> y = self.getInput<double>("y"); - BT::Optional<double> yaw = self.getInput<double>("yaw"); - BT::Optional<double> heading_tol = self.getInput<double>("heading_tol"); - BT::Optional<double> x_y_pos_tol = self.getInput<double>("x_y_pos_tol"); - - double x_goal, y_goal, yaw_goal, heading_tol_goal, x_y_pos_tol_goal; - if (!x || !y || !yaw || (!heading_tol && x_y_pos_tol)) - { - ROS_ERROR("CADCNavModuleBT::sync_adc_nav_go_to_pose-> Incorrect or missing input. It needs the following input ports: x(double), y(double), yaw(double), [Optional] heading_tol(double) and [Optional] x_y_pos_tol(double)"); - ROS_ERROR("CADCNavModuleBT::sync_adc_nav_go_to_pose-> The correct input options are: x + y + yaw, x + y + yaw + heading_tol or x + y + yaw + heading_tol + x_y_pos_tol"); - return BT::NodeStatus::FAILURE; - } - - x_goal = x.value(); - y_goal = y.value(); - yaw_goal = yaw.value(); - if (!x_y_pos_tol) - { - if (!heading_tol) - { - if (!this->adc_nav_module.go_to_pose(x_goal, y_goal, yaw_goal)) - return BT::NodeStatus::FAILURE; - } - else - { - heading_tol_goal = heading_tol.value(); - if (!this->adc_nav_module.go_to_pose(x_goal, y_goal, yaw_goal, heading_tol_goal)) - return BT::NodeStatus::FAILURE; - } - } - else - { - heading_tol_goal = heading_tol.value(); - x_y_pos_tol_goal = x_y_pos_tol.value(); - if (!this->adc_nav_module.go_to_pose(x_goal, y_goal, yaw_goal, heading_tol_goal, x_y_pos_tol_goal)) - return BT::NodeStatus::FAILURE; - } - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::async_adc_nav_go_to_pose(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::async_adc_nav_go_to_pose-> async_adc_nav_go_to_pose"); - BT::Optional<double> x = self.getInput<double>("x"); - BT::Optional<double> y = self.getInput<double>("y"); - BT::Optional<double> yaw = self.getInput<double>("yaw"); - BT::Optional<double> heading_tol = self.getInput<double>("heading_tol"); - BT::Optional<double> x_y_pos_tol = self.getInput<double>("x_y_pos_tol"); - BT::Optional<bool> new_goal_in = self.getInput<bool>("new_goal"); - - bool new_goal; - if (!new_goal_in) - new_goal = false; - else - new_goal = new_goal_in.value(); - - if (new_goal) - { - double x_goal, y_goal, yaw_goal, heading_tol_goal, x_y_pos_tol_goal; - if (!x || !y || !yaw || (!heading_tol && x_y_pos_tol)) - { - ROS_ERROR("CADCNavModuleBT::async_adc_nav_go_to_pose-> Incorrect or missing input. It needs the following input ports: x(double), y(double), yaw(double), [Optional] heading_tol(double) and [Optional] x_y_pos_tol(double)"); - ROS_ERROR("CADCNavModuleBT::async_adc_nav_go_to_pose-> The correct input options are: x + y + yaw, x + y + yaw + heading_tol or x + y + yaw + heading_tol + x_y_pos_tol"); - return BT::NodeStatus::FAILURE; - } - - x_goal = x.value(); - y_goal = y.value(); - yaw_goal = yaw.value(); - if (!x_y_pos_tol) - { - if (!heading_tol) - { - if (!this->adc_nav_module.go_to_pose(x_goal, y_goal, yaw_goal)) - return BT::NodeStatus::FAILURE; - } - else - { - heading_tol_goal = heading_tol.value(); - if (!this->adc_nav_module.go_to_pose(x_goal, y_goal, yaw_goal, heading_tol_goal)) - return BT::NodeStatus::FAILURE; - } - } - else - { - heading_tol_goal = heading_tol.value(); - x_y_pos_tol_goal = x_y_pos_tol.value(); - if (!this->adc_nav_module.go_to_pose(x_goal, y_goal, yaw_goal, heading_tol_goal, x_y_pos_tol_goal)) - return BT::NodeStatus::FAILURE; - } - } - if (this->adc_nav_module.is_finished()) - { - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - if (adc_nav_module_status == ADC_NAV_MODULE_SUCCESS) - return BT::NodeStatus::SUCCESS; - else - return BT::NodeStatus::FAILURE; - } - if (new_goal) - self.setOutput("new_goal", false); - return BT::NodeStatus::RUNNING; -} - -BT::NodeStatus CADCNavModuleBT::sync_adc_nav_go_to_orientation(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::sync_adc_nav_go_to_orientation-> sync_adc_nav_go_to_orientation"); - BT::Optional<double> yaw = self.getInput<double>("yaw"); - BT::Optional<double> heading_tol = self.getInput<double>("heading_tol"); - - double yaw_goal, heading_tol_goal; - if (!yaw) - { - ROS_ERROR("CADCNavModuleBT::sync_adc_nav_go_to_orientation-> Incorrect or missing input. It needs the following input ports: yaw(double) and [Optional] heading_tol(double)"); - return BT::NodeStatus::FAILURE; - } - - yaw_goal = yaw.value(); - if (!heading_tol) - { - if (!this->adc_nav_module.go_to_orientation (yaw_goal)) - return BT::NodeStatus::FAILURE; - } - else - { - heading_tol_goal = heading_tol.value(); - if (!this->adc_nav_module.go_to_orientation (yaw_goal, heading_tol_goal)) - return BT::NodeStatus::FAILURE; - } - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::async_adc_nav_go_to_orientation(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::async_adc_nav_go_to_orientation-> async_adc_nav_go_to_orientation"); - BT::Optional<double> yaw = self.getInput<double>("yaw"); - BT::Optional<double> heading_tol = self.getInput<double>("heading_tol"); - BT::Optional<bool> new_goal_in = self.getInput<bool>("new_goal"); - - bool new_goal; - if (!new_goal_in) - new_goal = false; - else - new_goal = new_goal_in.value(); - - if (new_goal) - { - double yaw_goal, heading_tol_goal; - if (!yaw) - { - ROS_ERROR("CADCNavModuleBT::async_adc_nav_go_to_orientation-> Incorrect or missing input. It needs the following input ports: yaw(double) and [Optional] heading_tol(double)"); - return BT::NodeStatus::FAILURE; - } - - yaw_goal = yaw.value(); - if (!heading_tol) - { - if (!this->adc_nav_module.go_to_orientation(yaw_goal)) - return BT::NodeStatus::FAILURE; - } - else - { - heading_tol_goal = heading_tol.value(); - if (!this->adc_nav_module.go_to_orientation(yaw_goal, heading_tol_goal)) - return BT::NodeStatus::FAILURE; - } - } - if (this->adc_nav_module.is_finished()) - { - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - if (adc_nav_module_status == ADC_NAV_MODULE_SUCCESS) - return BT::NodeStatus::SUCCESS; - else - return BT::NodeStatus::FAILURE; - } - if (new_goal) - self.setOutput("new_goal", false); - return BT::NodeStatus::RUNNING; -} - -BT::NodeStatus CADCNavModuleBT::sync_adc_nav_go_to_position(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::sync_adc_nav_go_to_position-> sync_adc_nav_go_to_position"); - BT::Optional<double> x = self.getInput<double>("x"); - BT::Optional<double> y = self.getInput<double>("y"); - BT::Optional<double> x_y_pos_tol = self.getInput<double>("x_y_pos_tol"); - - double x_goal, y_goal, x_y_pos_tol_goal; - if (!x || !y) - { - ROS_ERROR("CADCNavModuleBT::sync_adc_nav_go_to_position-> Incorrect or missing input. It needs the following input ports: x(double), y(double) and [Optional] x_y_pos_tol(double)"); - return BT::NodeStatus::FAILURE; - } - - x_goal = x.value(); - y_goal = y.value(); - if (!x_y_pos_tol) - { - if (!this->adc_nav_module.go_to_position(x_goal, y_goal)) - return BT::NodeStatus::FAILURE; - } - else - { - x_y_pos_tol_goal = x_y_pos_tol.value(); - if (!this->adc_nav_module.go_to_position(x_goal, y_goal, x_y_pos_tol_goal)) - return BT::NodeStatus::FAILURE; - } - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::async_adc_nav_go_to_position(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::async_adc_nav_go_to_position-> async_adc_nav_go_to_position"); - BT::Optional<double> x = self.getInput<double>("x"); - BT::Optional<double> y = self.getInput<double>("y"); - BT::Optional<double> x_y_pos_tol = self.getInput<double>("x_y_pos_tol"); - BT::Optional<bool> new_goal_in = self.getInput<bool>("new_goal"); - - bool new_goal; - if (!new_goal_in) - new_goal = false; - else - new_goal = new_goal_in.value(); - - if (new_goal) - { - double x_goal, y_goal, x_y_pos_tol_goal; - if (!x || !y) - { - ROS_ERROR("CADCNavModuleBT::async_adc_nav_go_to_position-> Incorrect or missing input. It needs the following input ports: x(double), y(double) and [Optional] x_y_pos_tol(double)"); - return BT::NodeStatus::FAILURE; - } - - x_goal = x.value(); - y_goal = y.value(); - if (!x_y_pos_tol) - { - if (!this->adc_nav_module.go_to_position(x_goal, y_goal)) - return BT::NodeStatus::FAILURE; - } - else - { - x_y_pos_tol_goal = x_y_pos_tol.value(); - if (!this->adc_nav_module.go_to_position(x_goal, y_goal, x_y_pos_tol_goal)) - return BT::NodeStatus::FAILURE; - } - } - if (this->adc_nav_module.is_finished()) - { - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - if (adc_nav_module_status == ADC_NAV_MODULE_SUCCESS) - return BT::NodeStatus::SUCCESS; - else - return BT::NodeStatus::FAILURE; - } - if (new_goal) - self.setOutput("new_goal", false); - return BT::NodeStatus::RUNNING; -} - -BT::NodeStatus CADCNavModuleBT::set_adc_nav_goal_frame(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::set_adc_nav_goal_frame-> set_adc_nav_goal_frame"); - BT::Optional<std::string> frame_id = self.getInput<std::string>("frame_id"); - - std::string frame_id_goal; - if (!frame_id) - { - ROS_ERROR("CADCNavModuleBT::set_adc_nav_goal_frame-> Incorrect or missing input. It needs the following input ports: frame_id(std::string)"); - return BT::NodeStatus::FAILURE; - } - - frame_id_goal = frame_id.value(); - - this->adc_nav_module.set_goal_frame(frame_id_goal); - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_costmaps_clear(void) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_costmaps_clear-> adc_nav_costmaps_clear"); - if (this->adc_nav_module.costmaps_clear()) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_costmaps_enable_auto_clear(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_costmaps_enable_auto_clear-> adc_nav_costmaps_enable_auto_clear"); - BT::Optional<double> rate_hz = self.getInput<double>("rate_hz"); - - double rate_hz_goal; - if (!rate_hz) - { - ROS_ERROR("CADCNavModuleBT::adc_nav_costmaps_enable_auto_clear-> Incorrect or missing input. It needs the following input ports: rate_hz(double)"); - return BT::NodeStatus::FAILURE; - } - - rate_hz_goal = rate_hz.value(); - - this->adc_nav_module.costmaps_enable_auto_clear(rate_hz_goal); - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_costmaps_disable_auto_clear(void) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_costmaps_disable_auto_clear-> adc_nav_costmaps_disable_auto_clear"); - this->adc_nav_module.costmaps_disable_auto_clear(); - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_set_bool_parameter(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_set_bool_parameter-> adc_nav_set_bool_parameter"); - BT::Optional<std::string> name_space = self.getInput<std::string>("name_space"); - BT::Optional<std::string> name = self.getInput<std::string>("name"); - BT::Optional<bool> value = self.getInput<bool>("value"); - - std::string name_space_goal, name_goal; - bool value_goal; - if (!name_space || !name || !value) - { - ROS_ERROR("CADCNavModuleBT::adc_nav_set_bool_parameter-> Incorrect or missing input. It needs the following input ports: name_space(std::string), name(std::string) and value(bool)"); - return BT::NodeStatus::FAILURE; - } - - name_space_goal = name_space.value(); - name_goal = name.value(); - value_goal = value.value(); - - if (this->adc_nav_module.set_parameter(name_space_goal, name_goal, value_goal)) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_set_int_parameter(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_set_int_parameter-> adc_nav_set_int_parameter"); - BT::Optional<std::string> name_space = self.getInput<std::string>("name_space"); - BT::Optional<std::string> name = self.getInput<std::string>("name"); - BT::Optional<int> value = self.getInput<int>("value"); - - std::string name_space_goal, name_goal; - int value_goal; - if (!name_space || !name || !value) - { - ROS_ERROR("CADCNavModuleBT::adc_nav_set_bool_parameter-> Incorrect or missing input. It needs the following input ports: name_space(std::string), name(std::string) and value(int)"); - return BT::NodeStatus::FAILURE; - } - - name_space_goal = name_space.value(); - name_goal = name.value(); - value_goal = value.value(); - - if (this->adc_nav_module.set_parameter(name_space_goal, name_goal, value_goal)) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_set_string_parameter(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_set_string_parameter-> adc_nav_set_string_parameter"); - BT::Optional<std::string> name_space = self.getInput<std::string>("name_space"); - BT::Optional<std::string> name = self.getInput<std::string>("name"); - BT::Optional<std::string> value = self.getInput<std::string>("value"); - - std::string name_space_goal, name_goal; - std::string value_goal; - if (!name_space || !name || !value) - { - ROS_ERROR("CADCNavModuleBT::adc_nav_set_bool_parameter-> Incorrect or missing input. It needs the following input ports: name_space(std::string), name(std::string) and value(std::string)"); - return BT::NodeStatus::FAILURE; - } - - name_space_goal = name_space.value(); - name_goal = name.value(); - value_goal = value.value(); - - if (this->adc_nav_module.set_parameter(name_space_goal, name_goal, value_goal)) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::adc_nav_set_double_parameter(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::adc_nav_set_double_parameter-> adc_nav_set_double_parameter"); - BT::Optional<std::string> name_space = self.getInput<std::string>("name_space"); - BT::Optional<std::string> name = self.getInput<std::string>("name"); - BT::Optional<double> value = self.getInput<double>("value"); - - std::string name_space_goal, name_goal; - double value_goal; - if (!name_space || !name || !value) - { - ROS_ERROR("CADCNavModuleBT::adc_nav_set_bool_parameter-> Incorrect or missing input. It needs the following input ports: name_space(std::string), name(std::string) and value(double)"); - return BT::NodeStatus::FAILURE; - } - - name_space_goal = name_space.value(); - name_goal = name.value(); - value_goal = value.value(); - - if (this->adc_nav_module.set_parameter(name_space_goal, name_goal, value_goal)) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::get_adc_nav_current_pose(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::get_adc_nav_current_pose-> get_adc_nav_current_pose"); - - geometry_msgs::Pose pose_out = this->adc_nav_module.getCurrentPose(); - - self.setOutput("pose", pose_out); - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::get_adc_nav_goal_distance(BT::TreeNode& self) -{ - ROS_DEBUG("CADCNavModuleBT::get_adc_nav_goal_distance-> get_adc_nav_goal_distance"); - - double dist = this->adc_nav_module.getGoalDistance(); - self.setOutput("distance", dist); - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::sync_cancel_adc_nav_action(void) -{ - ROS_DEBUG("CADCNavModuleBT::sync_cancel_adc_nav_action-> sync_cancel_adc_nav_action"); - this->adc_nav_module.stop(); - return BT::NodeStatus::SUCCESS; -} - -BT::NodeStatus CADCNavModuleBT::async_cancel_adc_nav_action(void) -{ - ROS_DEBUG("CADCNavModuleBT::async_cancel_adc_nav_action-> async_cancel_adc_nav_action"); - this->adc_nav_module.stop(); - if (this->adc_nav_module.is_finished()) - { - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - if (adc_nav_module_status == ADC_NAV_MODULE_SUCCESS) - return BT::NodeStatus::SUCCESS; - else - return BT::NodeStatus::FAILURE; - } - return BT::NodeStatus::RUNNING; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_finished(void) -{ - if (this->adc_nav_module.is_finished()) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::async_is_adc_nav_finished(void) -{ - if (this->adc_nav_module.is_finished()) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::RUNNING; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_running(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_RUNNING) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_success(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_SUCCESS) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_action_start_fail(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_ACTION_START_FAIL) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_timeout(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_TIMEOUT) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_fb_watchdog(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_FB_WATCHDOG) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_aborted(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_ABORTED) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_preempted(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_PREEMPTED) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_rejected(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_REJECTED) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_set_param_fail(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_SET_PARAM_FAIL) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_param_not_present(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_PARAM_NOT_PRESENT) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_no_odom(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_NO_ODOM) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} - -BT::NodeStatus CADCNavModuleBT::is_adc_nav_module_no_transform(void) -{ - adc_nav_module_status_t adc_nav_module_status = this->adc_nav_module.get_status(); - - if (adc_nav_module_status == ADC_NAV_MODULE_NO_TRANSFORM) - return BT::NodeStatus::SUCCESS; - return BT::NodeStatus::FAILURE; -} diff --git a/src/adc_nav_client_alg.cpp b/src/adc_nav_client_alg.cpp deleted file mode 100644 index 64b5eb0..0000000 --- a/src/adc_nav_client_alg.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include "adc_nav_client_alg.h" - -ADCNavClientAlgorithm::ADCNavClientAlgorithm(void) -{ - pthread_mutex_init(&this->access_,NULL); -} - -ADCNavClientAlgorithm::~ADCNavClientAlgorithm(void) -{ - pthread_mutex_destroy(&this->access_); -} - -void ADCNavClientAlgorithm::config_update(Config& new_cfg, uint32_t level) -{ - this->lock(); - - // save the current configuration - this->config_=new_cfg; - - this->unlock(); -} - -// ADCNavClientAlgorithm Public API diff --git a/src/adc_nav_client_alg_node.cpp b/src/adc_nav_client_alg_node.cpp deleted file mode 100644 index eab6a41..0000000 --- a/src/adc_nav_client_alg_node.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "adc_nav_client_alg_node.h" -#include <iri_adc_nav_module/adc_nav_module.h> -#include <tf2_geometry_msgs/tf2_geometry_msgs.h> -#include <tf2_ros/transform_listener.h> - -ADCNavClientAlgNode::ADCNavClientAlgNode(void) : - algorithm_base::IriBaseAlgorithm<ADCNavClientAlgorithm>(), - nav("nav_module",ros::this_node::getName()) -{ - //init class attributes if necessary - //this->loop_rate_ = 2;//in [Hz] - - // [init publishers] - - // [init subscribers] - - // [init services] - - // [init clients] - - // [init nav servers] - - // [init nav clients] -} - -ADCNavClientAlgNode::~ADCNavClientAlgNode(void) -{ - // [free dynamic memory] -} - -void ADCNavClientAlgNode::mainNodeThread(void) -{ - // [fill msg structures] - - // [fill srv structure and make request to the server] - - // [fill nav structure and make request to the nav server] - - // [publish messages] -} - -/* [subscriber callbacks] */ - -/* [service callbacks] */ - -/* [nav callbacks] */ - -void ADCNavClientAlgNode::node_config_update(Config &config, uint32_t level) -{ - this->alg_.lock(); - if(config.start_pose_nav) - { - this->nav.set_goal_frame_id(config.mb_frame_id); - this->nav.go_to_pose(config.mb_x_pos,config.mb_y_pos,config.mb_yaw,config.mb_xy_tol,config.mb_yaw_tol); - config.start_pose_nav=false; - } - else if(config.start_position_nav) - { - this->nav.set_goal_frame_id(config.mb_frame_id); - this->nav.go_to_position(config.mb_x_pos,config.mb_y_pos,config.mb_xy_tol); - config.start_position_nav=false; - } - else if(config.start_orientation_nav) - { - this->nav.set_goal_frame_id(config.mb_frame_id); - this->nav.go_to_orientation(config.mb_yaw,config.mb_yaw_tol); - config.start_orientation_nav=false; - } - else if(config.stop_nav) - { - this->nav.stop(); - config.stop_nav=false; - } - if(config.cm_clear_costmaps) - { - this->nav.costmaps_clear(); - config.cm_clear_costmaps=false; - } - else if(config.cm_enable_auto_clear) - { - this->nav.costmaps_enable_auto_clear(config.cm_auto_clear_rate_hz); - config.cm_enable_auto_clear=false; - } - else if(config.cm_disable_auto_clear) - { - this->nav.costmaps_disable_auto_clear(); - config.cm_disable_auto_clear=false; - } - else if (config.print_goal_distance) - { - double dist = this->nav.getGoalDistance(); - ROS_INFO_STREAM("Goal distance = " << dist); - config.print_goal_distance = false; - } - else if(config.get_plan) - { - nav_msgs::Path plan; - double roll, pitch, yaw; - geometry_msgs::Pose current_pose; - - current_pose=this->nav.get_current_pose(); - tf2::Matrix3x3 m(tf2::Quaternion(current_pose.orientation.x,current_pose.orientation.y,current_pose.orientation.z,current_pose.orientation.w)); - m.getRPY(roll, pitch, yaw); - this->nav.make_plan(current_pose.position.x,current_pose.position.x,yaw,config.mb_x_pos,config.mb_y_pos,config.mb_yaw,config.mb_frame_id,config.mb_xy_tol,plan); - for(unsigned int i=0;i<plan.poses.size();i++) - std::cout << plan.poses[i].pose.position.x << "," << plan.poses[i].pose.position.y << std::endl; - config.get_plan=false; - } - else if(config.get_opendrive_map) - { - nav_msgs::OccupancyGrid map; - - this->nav.get_opendrive_map(map); - config.get_opendrive_map=false; - } - else if(config.get_opendrive_nodes) - { - std::vector<unsigned int> nodes; - - if(this->nav.get_opendrive_nodes(nodes)) - { - for(unsigned int i=0;i<nodes.size();i++) - std::cout << nodes[i] << ","; - std::cout << std::endl; - } - config.get_opendrive_nodes=false; - } - this->alg_.unlock(); -} - -void ADCNavClientAlgNode::addNodeDiagnostics(void) -{ -} - -/* main function */ -int main(int argc,char *argv[]) -{ - return algorithm_base::main<ADCNavClientAlgNode>(argc, argv, "adc_nav_client_alg_node"); -} diff --git a/src/adc_nav_module.cpp b/src/adc_nav_module.cpp deleted file mode 100644 index 2450d7a..0000000 --- a/src/adc_nav_module.cpp +++ /dev/null @@ -1,239 +0,0 @@ -#include <iri_adc_nav_module/adc_nav_module.h> -#include <tf/transform_datatypes.h> - -CADCNavModule::CADCNavModule(const std::string &name,const std::string &name_space) : CNavModule(name,name_space), - CAckermannLPModule("local_planner",this->module_nh.getNamespace()), - COpendriveGPModule("global_planner",this->module_nh.getNamespace()) -{ - this->start_operation(); - - //Variables - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_SUCCESS; - this->new_goal=false; - this->goal_x=0.0; - this->goal_y=0.0; - this->goal_yaw=0.0; - this->cancel_pending=false; -} - -/* State machine */ -void CADCNavModule::state_machine(void) -{ - switch(this->state) - { - case ADC_NAV_MODULE_IDLE: ROS_DEBUG("CADCNavModule: Idle"); - if(this->new_goal) - { - this->new_goal=false; - this->state=ADC_NAV_MODULE_TRANSFORM; - this->status=ADC_NAV_MODULE_RUNNING; - } - else - this->state=ADC_NAV_MODULE_IDLE; - break; - - case ADC_NAV_MODULE_TRANSFORM: ROS_DEBUG("CADCNavModule: Transform"); - if(this->get_pose_frame_id()!=this->get_goal_frame_id()) - { - if(this->transform_current_pose()) - this->state=ADC_NAV_MODULE_START; - else - this->state=ADC_NAV_MODULE_IDLE; - } - else - this->state=ADC_NAV_MODULE_START; - break; - - case ADC_NAV_MODULE_START: ROS_DEBUG("CADCNavModule: Start"); - switch(this->start_action(this->goal_x,this->goal_y,this->goal_yaw)) - { - case ACT_SRV_SUCCESS: this->state=ADC_NAV_MODULE_WAIT; - ROS_INFO("CADCNavModule : goal start successfull"); - break; - case ACT_SRV_PENDING: this->state=ADC_NAV_MODULE_START; - ROS_WARN("CADCNavModule : goal start pending"); - break; - case ACT_SRV_FAIL: this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_ACTION_START_FAIL; - ROS_ERROR("CADCNavModule: goal start failed"); - break; - } - break; - - case ADC_NAV_MODULE_WAIT: ROS_DEBUG("CADCNavModule : Wait"); - switch(this->get_action_status()) - { - case ACTION_IDLE: - case ACTION_RUNNING: ROS_DEBUG("CADCNavModule : action running"); - this->state=ADC_NAV_MODULE_WAIT; - break; - case ACTION_SUCCESS: ROS_INFO("CADCNavModule : action ended successfully"); - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_SUCCESS; - break; - case ACTION_TIMEOUT: ROS_ERROR("CADCNavModule : action did not finish in the allowed time"); - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_TIMEOUT; - break; - case ACTION_FB_WATCHDOG: ROS_ERROR("CADCNavModule : No feedback received for a long time"); - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_FB_WATCHDOG; - break; - case ACTION_ABORTED: ROS_ERROR("CADCNavModule : Action failed to complete"); - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_ABORTED; - break; - case ACTION_PREEMPTED: ROS_ERROR("CADCNavModule : Action was interrupted by another request"); - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_PREEMPTED; - break; - case ACTION_REJECTED: ROS_ERROR("CADCNavModule : Action was rejected by server"); - this->state=ADC_NAV_MODULE_IDLE; - this->status=ADC_NAV_MODULE_REJECTED; - break; - } - if(this->new_goal) - { - this->new_goal=false; - this->state=ADC_NAV_MODULE_TRANSFORM; - } - if(this->cancel_pending) - { - this->cancel_pending=false; - this->cancel_action(); - } - break; - } -} - -void CADCNavModule::reconfigure_callback(iri_adc_nav_module::ADCNavModuleConfig &config, uint32_t level) -{ - this->lock(); - CNavModule::dynamic_reconfigure(config,"nav"); - this->config=config; - this->unlock(); -} - -// basic navigation functions -bool CADCNavModule::go_to_orientation(double yaw,double heading_tol) -{ - double xy_tol,yaw_tol; - - this->lock(); - if(heading_tol!=DEFAULT_HEADING_TOL) - { - if(this->get_goal_tolerances(xy_tol,yaw_tol)) - { - yaw_tol=heading_tol; - if(this->set_goal_tolerances(xy_tol,yaw_tol)) - { - this->unlock(); - return false; - } - } - else - { - this->unlock(); - return false; - } - } - /* store the new information goal */ - this->goal_x=0.0; - this->goal_y=0.0; - this->goal_yaw=yaw; - this->new_goal=true; - this->unlock(); - - return true; -} - -bool CADCNavModule::go_to_position(double x,double y,double x_y_pos_tol) -{ - double xy_tol,yaw_tol; - - this->lock(); - if(x_y_pos_tol!=DEFAULT_X_Y_POS_TOL) - { - if(this->get_goal_tolerances(xy_tol,yaw_tol)) - { - xy_tol=x_y_pos_tol; - if(this->set_goal_tolerances(xy_tol,yaw_tol)) - { - this->unlock(); - return false; - } - } - else - { - this->unlock(); - return false; - } - } - /* store the new information goal */ - this->goal_x=x; - this->goal_y=y; - this->goal_yaw=0.0; - this->new_goal=true; - this->unlock(); - - return true; -} - -bool CADCNavModule::go_to_pose(double x,double y,double yaw,double heading_tol,double x_y_pos_tol) -{ - double xy_tol,yaw_tol; - - this->lock(); - if(heading_tol!=DEFAULT_HEADING_TOL || x_y_pos_tol!=DEFAULT_X_Y_POS_TOL) - { - if(this->get_goal_tolerances(xy_tol,yaw_tol)) - { - if(x_y_pos_tol!=DEFAULT_X_Y_POS_TOL) - xy_tol=x_y_pos_tol; - if(heading_tol!=DEFAULT_HEADING_TOL) - yaw_tol=heading_tol; - if(this->set_goal_tolerances(xy_tol,yaw_tol)) - { - this->unlock(); - return false; - } - } - else - { - this->unlock(); - return false; - } - } - /* store the new information goal */ - this->goal_x=x; - this->goal_y=y; - this->goal_yaw=yaw; - this->new_goal=true; - this->unlock(); - - return true; -} - -void CADCNavModule::stop(void) -{ - if(this->state!=ADC_NAV_MODULE_IDLE) - this->cancel_pending=true; -} - -bool CADCNavModule::is_finished(void) -{ - if(this->state==ADC_NAV_MODULE_IDLE && this->new_goal==false) - return true; - else - return false; -} - -adc_nav_module_status_t CADCNavModule::get_status(void) -{ - return this->status; -} - -CADCNavModule::~CADCNavModule() -{ -} diff --git a/src/iri_adc_nav_module/dyn_params.pyc b/src/iri_adc_nav_module/dyn_params.pyc deleted file mode 100644 index 3c8e0755e31367a17eb059cb19931ea0b1c836f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1678 zcmcgsUvC^W5TD(<OVU7S)3i+styn-vr%KI9@QMghr1C^T*YJ`T%eVGz-0rSV_FO_r z%1ins;6w1v$Ke|w@d4mB-n(26#4Enr@p%4uJoB@Af9`B=egBg#X)$ulU*U_NgBbiX zs)>$;%c;(&$>}7grbj0|YWj52r_A)|4bjPfOrM?)2k>)$VGJ{HEadU9C+q_dZH#KX znb%fD8_ry5)l3K7M83bS)g?RME|t6M%Fd;fT(=hA5$1S=-7bk<fM#@+(d(Qp^TiSe z*%wjoEm7Wy`jRFL;e@m7U*(i>@)SWo30@EAazHQO4AFr0xld+;%qE#Fx*AZnQr>_P zrGRpqc%xJHmY(lG2_GomC9^~3Ju)}xY7_qbrOB;plU*{m-!kE?WsZAYN*i>!vGlrg zz3W}#8{Mwg%6r!#_sQH(As?h&S0Uf;LT<_y&xaqNn9mS~NPTO3V>w)~v``&CMf#Y# z7V>t-pIJ50(emEfQcclUtDJEVQ~VTUY^OHZwzNgk6@FUqsV!zcI_Y*%d0oe}Q=?~m zZ#`V8;aIC#uxC+JM`>Ni+WC1bI>hi@@$$%8oog;njjt3t<Pqb?(0rqRaLv3aL{v;H zpIh4&VqG*gMqSzH1hLhRcYgi)_g8NY-Dg<wZHdX#6v)r{KLfHa&b8xW>O;Xnw-HR^ z<VNrgNLgDQROutj@d^pLCQ`Q56Wk0vXWwb!hcNoi2Iq|{bzNT+$stv35hwCT{|>Z@ zpn_(rPG3c-%aJ5dEFFtk3S9m2vy9&kD_CIsahN*a=$E*gwQh&f<s_2JTLnL#jRg#2 zxqhixkOT7QF$cxKJkiAa8f+izahO}+4DW}Z%i(w|1y1%)(QP{vT?$j#HhHvwP1>)u z=iPouEM3C2gz=PbVQTyWcWTjjLFVFYV=)-w>qwk}8=V5lBfL758@b?~)OsSbVyl6b zIEtYhwff9eTCkW@+LQ{S1>BQ`c>F_bE|%}q!R#X8PYSj2TRdW^LJuXU{ARwF?d7|m zkFrPkC-?~mnm-##`S<_?VRhq56>RC-sjKF}9;AoQvJDEwvS_Ubo;1I7ZF)Z?x!|K> ols_J<@=7I7{pva=s9IGgasOwDq~l+7Pso?j&?q?B&K~A}1H|^X$^ZZW diff --git a/src/iri_adc_nav_module/__init__.py b/src/iri_nav_module/__init__.py similarity index 100% rename from src/iri_adc_nav_module/__init__.py rename to src/iri_nav_module/__init__.py diff --git a/src/iri_adc_nav_module/dyn_params.py b/src/iri_nav_module/dyn_params.py similarity index 87% rename from src/iri_adc_nav_module/dyn_params.py rename to src/iri_nav_module/dyn_params.py index c396cdb..4de336e 100644 --- a/src/iri_adc_nav_module/dyn_params.py +++ b/src/iri_nav_module/dyn_params.py @@ -27,3 +27,11 @@ def add_nav_module_params(gen,name): return new_group +def add_opendrive_gp_module_params(gen,name): + + new_group = gen.add_group(name) + + add_module_service_params(new_group,name+"_get_map") + add_module_service_params(new_group,name+"_get_nodes") + + return new_group diff --git a/src/xml/bt_test.xml b/src/xml/bt_test.xml deleted file mode 100644 index 63ecdbd..0000000 --- a/src/xml/bt_test.xml +++ /dev/null @@ -1,184 +0,0 @@ -<?xml version="1.0"?> -<root main_tree_to_execute="BehaviorTree"> - <!-- ////////// --> - <BehaviorTree ID="BehaviorTree"> - <SequenceStar> - <Action ID="async_is_start_tree"/> - <SubTree ID="move_to_pose"/> - <SubTree ID="move_to_position"/> - <SubTree ID="move_to_orientation"/> - </SequenceStar> - </BehaviorTree> - <!-- ////////// --> - <BehaviorTree ID="move_to_pose"> - <SequenceStar> - <Action ID="set_tiago_nav_goal_frame_inputs" frame_id="{frame_id}"/> - <Action ID="set_tiago_nav_goal_frame" frame_id="{frame_id}"/> - <Action ID="set_tiago_nav_go_to_pose_inputs" x="{x}" y="{y}" yaw="{yaw}" heading_tol="{heading_tol}" x_y_pos_tol="{x_y_pos_tol}" new_goal="{new_goal}"/> - <Action ID="async_tiago_nav_go_to_pose" x="{x}" y="{y}" yaw="{yaw}" heading_tol="{heading_tol}" x_y_pos_tol="{x_y_pos_tol}" new_goal="{new_goal}"/> - </SequenceStar> - </BehaviorTree> - <!-- ////////// --> - <BehaviorTree ID="move_to_position"> - <SequenceStar> - <Action ID="set_tiago_nav_goal_frame_inputs" frame_id="{frame_id}"/> - <Action ID="set_tiago_nav_goal_frame" frame_id="{frame_id}"/> - <Action ID="set_tiago_nav_go_to_pose_inputs" x="{x}" y="{y}" yaw="{yaw}" heading_tol="{heading_tol}" x_y_pos_tol="{x_y_pos_tol}" new_goal="{new_goal}"/> - <Action ID="async_tiago_nav_go_to_position" x="{x}" y="{y}" x_y_pos_tol="{x_y_pos_tol}" new_goal="{new_goal}"/> - </SequenceStar> - </BehaviorTree> - <!-- ////////// --> - <BehaviorTree ID="move_to_orientation"> - <SequenceStar> - <Action ID="set_tiago_nav_goal_frame_inputs" frame_id="{frame_id}"/> - <Action ID="set_tiago_nav_goal_frame" frame_id="{frame_id}"/> - <Action ID="set_tiago_nav_go_to_pose_inputs" x="{x}" y="{y}" yaw="{yaw}" heading_tol="{heading_tol}" x_y_pos_tol="{x_y_pos_tol}" new_goal="{new_goal}"/> - <Action ID="async_tiago_nav_go_to_orientation" yaw="{yaw}" heading_tol="{heading_tol}" new_goal="{new_goal}"/> - </SequenceStar> - </BehaviorTree> - <!-- ////////// --> - <TreeNodesModel> - <!-- basic_nodes --> - <Action ID="NOP"/> - <Action ID="is_not_start_tree"/> - <Condition ID="async_is_start_tree"/> - <Action ID="is_not_stop_tree"/> - <Condition ID="async_is_stop_tree"/> - <Action ID="set_start_tree"/> - <Action ID="set_stop_tree"/> - <Action ID="reset_start_tree"/> - <Action ID="reset_stop_tree"/> - <!-- tiago_nav_module --> - <Action ID="sync_cancel_tiago_nav_action"/> - <Action ID="async_cancel_tiago_nav_action"/> - <Action ID="async_is_tiago_nav_finished"/> - <Action ID="sync_tiago_nav_go_to_pose"> - <input_port name="x"> desired X positon with respect to the goal frame</input_port> - <input_port name="y"> desired Y positon with respect to the goal frame</input_port> - <input_port name="yaw"> desired orientation with respect to the goal frame</input_port> - <input_port name="heading_tol"> heading tolerance for the goal</input_port> - <input_port name="x_y_pos_tol"> position tolerance for the goal</input_port> - </Action> - <Action ID="async_tiago_nav_go_to_pose"> - <input_port name="x"> desired X positon with respect to the goal frame</input_port> - <input_port name="y"> desired Y positon with respect to the goal frame</input_port> - <input_port name="yaw"> desired orientation with respect to the goal frame</input_port> - <input_port name="heading_tol"> heading tolerance for the goal</input_port> - <input_port name="x_y_pos_tol"> position tolerance for the goal</input_port> - <input_port default="True" name="new_goal"> If it's a new_goal</input_port> - </Action> - <Action ID="sync_tiago_nav_go_to_orientation"> - <input_port name="yaw"> desired orientation with respect to the goal frame</input_port> - <input_port name="heading_tol"> heading tolerance for the goal</input_port> - </Action> - <Action ID="async_tiago_nav_go_to_orientation"> - <input_port name="yaw"> desired orientation with respect to the goal frame</input_port> - <input_port name="heading_tol"> heading tolerance for the goal</input_port> - <input_port name="new_goal"> If it's a new_goal</input_port> - </Action> - <Action ID="sync_tiago_nav_go_to_position"> - <input_port name="x"> desired X positon with respect to the goal frame</input_port> - <input_port name="y"> desired Y positon with respect to the goal frame</input_port> - <input_port name="x_y_pos_tol"> position tolerance for the goal</input_port> - </Action> - <Action ID="async_tiago_nav_go_to_position"> - <input_port name="x"> desired X positon with respect to the goal frame</input_port> - <input_port name="y"> desired Y positon with respect to the goal frame</input_port> - <input_port name="x_y_pos_tol"> position tolerance for the goal</input_port> - <input_port name="new_goal"> If it's a new_goal</input_port> - </Action> - <Action ID="sync_tiago_nav_go_to_poi"> - <input_port name="poi"> name of the desired point of interest to move to</input_port> - </Action> - <Action ID="async_tiago_nav_go_to_poi"> - <input_port name="poi"> name of the desired point of interest to move to</input_port> - </Action> - <Action ID="sync_tiago_nav_go_to_waypoints"> - <input_port name="group"> Name of the desired group of points of interest</input_port> - <input_port name="first_index"> The index of the first waypoint to execute inside the list of interest points inside the group</input_port> - <input_port name="num"> The number of waypoints to execute. If 0 is provided, all of them will be executed</input_port> - <input_port name="continue_on_error"> Whether to contiune on the next waypoint when the current one can not be reached (true) or not (false). By default it is set to not continue</input_port> - </Action> - <Action ID="async_tiago_nav_go_to_waypoints"> - <input_port name="group"> Name of the desired group of points of interest</input_port> - <input_port name="first_index"> The index of the first waypoint to execute inside the list of interest points inside the group</input_port> - <input_port name="num"> The number of waypoints to execute. If 0 is provided, all of them will be executed</input_port> - <input_port name="continue_on_error"> Whether to contiune on the next waypoint when the current one can not be reached (true) or not (false). By default it is set to not continue</input_port> - <input_port name="new_goal"> If it's a new_goal</input_port> - </Action> - <Action ID="get_tiago_nav_current_waypoint"> - <output_port name="waypoint"> The index of the current waypoint being executed</output_port> - </Action> - <Action ID="set_tiago_nav_goal_frame"> - <input_port name="frame_id"> The name of the new reference frame for the future goals</input_port> - </Action> - <Action ID="tiago_nav_map_change"> - <input_port name="map_name"> name of the desired map</input_port> - </Action> - <Action ID="tiago_nav_costmaps_clear"/> - <Action ID="tiago_nav_costmaps_enable_auto_clear"> - <input_port name="rate_hz"> the desired clearing rate in Hz. This value should be less than 1 Hz, normally in the range of 0.1 to 0.01 Hz</input_port> - </Action> - <Action ID="tiago_nav_costmaps_disable_auto_clear"/> - <Action ID="tiago_nav_set_bool_parameter"> - <input_port name="name_space"> String with the parameter name space</input_port> - <input_port name="name"> String with the name of the parameter to change</input_port> - <input_port name="value"> the new value for the parameter</input_port> - </Action> - <Action ID="tiago_nav_set_int_parameter"> - <input_port name="name_space"> String with the parameter name space</input_port> - <input_port name="name"> String with the name of the parameter to change</input_port> - <input_port name="value"> the new value for the parameter</input_port> - </Action> - <Action ID="tiago_nav_set_string_parameter"> - <input_port name="name_space"> String with the parameter name space</input_port> - <input_port name="name"> String with the name of the parameter to change</input_port> - <input_port name="value"> the new value for the parameter</input_port> - </Action> - <Action ID="tiago_nav_set_double_parameter"> - <input_port name="name_space"> String with the parameter name space</input_port> - <input_port name="name"> String with the name of the parameter to change</input_port> - <input_port name="value"> the new value for the parameter</input_port> - </Action> - <Action ID="get_tiago_nav_current_pose"> - <output_port name="pose"> current pose</output_port> - </Action> - <Action ID="get_tiago_goal_distance"> - <output_port name="distance"> current goal distance</output_port> - </Action> - <Condition ID="is_tiago_nav_finished"/> - <Condition ID="is_tiago_nav_module_running"/> - <Condition ID="is_tiago_nav_module_success"/> - <Condition ID="is_tiago_nav_module_action_start_fail"/> - <Condition ID="is_tiago_nav_module_timeout"/> - <Condition ID="is_tiago_nav_module_fb_watchdog"/> - <Condition ID="is_tiago_nav_module_aborted"/> - <Condition ID="is_tiago_nav_module_preempted"/> - <Condition ID="is_tiago_nav_module_rejected"/> - <Condition ID="is_tiago_nav_module_set_param_fail"/> - <Condition ID="is_tiago_nav_module_param_not_present"/> - <Condition ID="is_tiago_nav_module_no_odom"/> - <Condition ID="is_tiago_nav_module_no_transform"/> - <Condition ID="is_tiago_nav_module_unknown_map"/> - <Condition ID="is_tiago_nav_module_invalid_mode"/> - <!-- Client --> - <Action ID="set_tiago_nav_go_to_pose_inputs"> - <output_port name="x"> desired X positon with respect to the goal frame</output_port> - <output_port name="y"> desired Y positon with respect to the goal frame</output_port> - <output_port name="yaw"> desired orientation with respect to the goal frame</output_port> - <output_port name="heading_tol"> heading tolerance for the goal</output_port> - <output_port name="x_y_pos_tol"> position tolerance for the goal</output_port> - <output_port name="new_goal"> If it's a new_goal</output_port> - </Action> - <Action ID="set_tiago_nav_goal_frame_inputs"> - <output_port name="frame_id"> The name of the new reference frame for the future goals</output_port> - </Action> - <!-- Tree --> - <SubTree ID="move_to_pose"/> - <SubTree ID="move_to_position"/> - <SubTree ID="move_to_posorientation"/> - </TreeNodesModel> - <!-- ////////// --> -</root> - - -- GitLab