Skip to content

Commit 0d04a3e

Browse files
benjinneBenjamin Linne
andauthored
ROS2 include ros_pkg attribute support (#351)
* ROS2 include pkg support * ros2 build fixed Co-authored-by: Benjamin Linne <[email protected]>
1 parent 392f8a7 commit 0d04a3e

File tree

2 files changed

+49
-38
lines changed

2 files changed

+49
-38
lines changed

CMakeLists.txt

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,7 @@ find_package(ament_cmake QUIET)
8383

8484
if ( ament_cmake_FOUND )
8585

86-
# Not adding -DUSING_ROS since xml_parsing.cpp hasn't been ported to ROS2
87-
86+
add_definitions( -DUSING_ROS2 )
8887
message(STATUS "------------------------------------------")
8988
message(STATUS "BehaviourTree is being built using AMENT.")
9089
message(STATUS "------------------------------------------")
@@ -116,35 +115,6 @@ elseif(BUILD_UNIT_TESTS)
116115
endif()
117116

118117

119-
#############################################################
120-
if(ament_cmake_FOUND)
121-
set( BEHAVIOR_TREE_LIB_DESTINATION lib )
122-
set( BEHAVIOR_TREE_INC_DESTINATION include )
123-
set( BEHAVIOR_TREE_BIN_DESTINATION bin )
124-
125-
ament_export_include_directories(include)
126-
ament_export_libraries(${BEHAVIOR_TREE_LIBRARY})
127-
ament_package()
128-
elseif(catkin_FOUND)
129-
set( BEHAVIOR_TREE_LIB_DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} )
130-
set( BEHAVIOR_TREE_INC_DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION} )
131-
set( BEHAVIOR_TREE_BIN_DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} )
132-
else()
133-
set( BEHAVIOR_TREE_LIB_DESTINATION lib )
134-
set( BEHAVIOR_TREE_INC_DESTINATION include )
135-
set( BEHAVIOR_TREE_BIN_DESTINATION bin )
136-
137-
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${BEHAVIOR_TREE_BIN_DESTINATION}" )
138-
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${BEHAVIOR_TREE_LIB_DESTINATION}" )
139-
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${BEHAVIOR_TREE_BIN_DESTINATION}" )
140-
endif()
141-
142-
message( STATUS "BEHAVIOR_TREE_LIB_DESTINATION: ${BEHAVIOR_TREE_LIB_DESTINATION} " )
143-
message( STATUS "BEHAVIOR_TREE_BIN_DESTINATION: ${BEHAVIOR_TREE_BIN_DESTINATION} " )
144-
message( STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY: ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} " )
145-
message( STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} " )
146-
message( STATUS "CMAKE_ARCHIVE_OUTPUT_DIRECTORY: ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} " )
147-
148118
#############################################################
149119
# LIBRARY
150120

@@ -249,6 +219,38 @@ else()
249219
-Wall -Wextra -Werror=return-type)
250220
endif()
251221

222+
#############################################################
223+
if(ament_cmake_FOUND)
224+
find_package(ament_index_cpp REQUIRED)
225+
ament_target_dependencies(${BEHAVIOR_TREE_LIBRARY} PUBLIC ament_index_cpp)
226+
227+
set( BEHAVIOR_TREE_LIB_DESTINATION lib )
228+
set( BEHAVIOR_TREE_INC_DESTINATION include )
229+
set( BEHAVIOR_TREE_BIN_DESTINATION bin )
230+
231+
ament_export_include_directories(include)
232+
ament_export_libraries(${BEHAVIOR_TREE_LIBRARY})
233+
ament_package()
234+
elseif(catkin_FOUND)
235+
set( BEHAVIOR_TREE_LIB_DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} )
236+
set( BEHAVIOR_TREE_INC_DESTINATION ${CATKIN_GLOBAL_INCLUDE_DESTINATION} )
237+
set( BEHAVIOR_TREE_BIN_DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION} )
238+
else()
239+
set( BEHAVIOR_TREE_LIB_DESTINATION lib )
240+
set( BEHAVIOR_TREE_INC_DESTINATION include )
241+
set( BEHAVIOR_TREE_BIN_DESTINATION bin )
242+
243+
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${BEHAVIOR_TREE_BIN_DESTINATION}" )
244+
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${BEHAVIOR_TREE_LIB_DESTINATION}" )
245+
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/${BEHAVIOR_TREE_BIN_DESTINATION}" )
246+
endif()
247+
248+
message( STATUS "BEHAVIOR_TREE_LIB_DESTINATION: ${BEHAVIOR_TREE_LIB_DESTINATION} " )
249+
message( STATUS "BEHAVIOR_TREE_BIN_DESTINATION: ${BEHAVIOR_TREE_BIN_DESTINATION} " )
250+
message( STATUS "CMAKE_RUNTIME_OUTPUT_DIRECTORY: ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} " )
251+
message( STATUS "CMAKE_LIBRARY_OUTPUT_DIRECTORY: ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} " )
252+
message( STATUS "CMAKE_ARCHIVE_OUTPUT_DIRECTORY: ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY} " )
253+
252254
######################################################
253255
# Samples
254256
if (BUILD_SAMPLES)

src/xml_parsing.cpp

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
#include <ros/package.h>
3131
#endif
3232

33+
#ifdef USING_ROS2
34+
#include <ament_index_cpp/get_package_share_directory.hpp>
35+
#endif
36+
3337
#include "behaviortree_cpp_v3/blackboard.h"
3438
#include "behaviortree_cpp_v3/utils/demangle_util.h"
3539

@@ -137,23 +141,28 @@ void XMLParser::Pimpl::loadDocImpl(BT_TinyXML2::XMLDocument* doc)
137141
{
138142

139143
filesystem::path file_path( include_node->Attribute("path") );
144+
const char* ros_pkg_relative_path = include_node->Attribute("ros_pkg");
145+
std::string ros_pkg_path;
140146

141-
if( include_node->Attribute("ros_pkg") )
147+
if( ros_pkg_relative_path )
142148
{
143-
#ifdef USING_ROS
144149
if( file_path.is_absolute() )
145150
{
146-
std::cout << "WARNING: <include path=\"...\"> containes an absolute path.\n"
151+
std::cout << "WARNING: <include path=\"...\"> contains an absolute path.\n"
147152
<< "Attribute [ros_pkg] will be ignored."<< std::endl;
148153
}
149-
else {
150-
auto ros_pkg_path = ros::package::getPath( include_node->Attribute("ros_pkg") );
151-
file_path = filesystem::path( ros_pkg_path ) / file_path;
152-
}
154+
else
155+
{
156+
#ifdef USING_ROS
157+
ros_pkg_path = ros::package::getPath(ros_pkg_relative_path);
158+
#elif defined USING_ROS2
159+
ros_pkg_path = ament_index_cpp::get_package_share_directory(ros_pkg_relative_path);
153160
#else
154161
throw RuntimeError("Using attribute [ros_pkg] in <include>, but this library was compiled "
155162
"without ROS support. Recompile the BehaviorTree.CPP using catkin");
156163
#endif
164+
file_path = filesystem::path( ros_pkg_path ) / file_path;
165+
}
157166
}
158167

159168
if( !file_path.is_absolute() )

0 commit comments

Comments
 (0)