polygon_plugin tutorial
Hi there, I'm looking for some clarification: After following the plugin tutorial I'm ending up with this error:
[ERROR] [1497996344.648813880]: Skipping XML Document "$/home/carson/catkin_ws/src/pluginlib_tutorials_/src/polygon_plugins.xml" which had no Root Element. This likely means the XML is malformed or missing.
[ERROR] [1497996344.648951692]: The plugin failed to load for some reason. Error: According to the loaded plugin descriptions the class polygon_plugins::Triangle with base class type polygon_base::RegularPolygon does not exist.
The difficulty seems to be when working with the polygon_plugins.xml
file (which seems to have some inconsistent text), ie where does it go, and which part of the tutorial should be in it.
Currently it looks like the example plugin xml before the writer looks deeper at the code, when some of the text starts to change.
Thanks in advance
Asked by crvogt on 2017-06-20 18:18:22 UTC
Answers
Be sure to not miss in your "polygon_plugins" CMakeLists the line
pluginlib_export_plugin_description_file(polygon_base plugins.xml)
The entire CMakeLists must be
cmake_minimum_required(VERSION 3.5)
project(polygon_plugins)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(ament_cmake_ros REQUIRED)
find_package(polygon_base REQUIRED)
find_package(pluginlib REQUIRED)
add_library(polygon_plugins src/polygon_plugins.cpp)
target_include_directories(polygon_plugins PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>)
ament_target_dependencies(
polygon_plugins
"polygon_base"
"pluginlib"
)
pluginlib_export_plugin_description_file(polygon_base plugins.xml)
# Causes the visibility macros to use dllexport rather than dllimport,
# which is appropriate when building the dll but not consuming it.
target_compile_definitions(polygon_plugins PRIVATE "POLYGON_PLUGINS_BUILDING_LIBRARY")
install(
DIRECTORY include/
DESTINATION include
)
install(
TARGETS polygon_plugins
EXPORT export_${PROJECT_NAME}
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin
)
if(BUILD_TESTING)
find_package(ament_lint_auto REQUIRED)
# the following line skips the linter which checks for copyrights
# uncomment the line when a copyright and license is not present in all source files
#set(ament_cmake_copyright_FOUND TRUE)
# the following line skips cpplint (only works in a git repo)
# uncomment the line when this package is not in a git repo
#set(ament_cmake_cpplint_FOUND TRUE)
ament_lint_auto_find_test_dependencies()
endif()
ament_export_include_directories(
include
)
ament_export_libraries(
polygon_plugins
)
ament_export_targets(
export_${PROJECT_NAME}
)
ament_package()
Hope it helps
Asked by dottant on 2022-04-13 11:22:53 UTC
Comments
Your post is missing the error.
Asked by Geoff on 2017-06-20 19:04:32 UTC
Thanks for the note. It showed up in the preview
Asked by crvogt on 2017-06-20 19:07:36 UTC
Can you post that source file (
polygon_plugins.xml
) as well?Asked by Geoff on 2017-06-20 19:09:08 UTC
@crvogt: for console copy-pastes you'll need to use the Preformatted Text button (the one with
101010
on it). Otherwise things like[ERROR]
will get filtered out of the HTML rendering.Asked by gvdhoorn on 2017-06-21 01:56:07 UTC