Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Export plugins to share directory & register CrossDoor plugin #804

Merged
merged 2 commits into from
Aug 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions sample_nodes/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -33,3 +33,15 @@ target_link_libraries(movebase_node_dyn PRIVATE ${BTCPP_LIBRARY})
target_compile_definitions(movebase_node_dyn PRIVATE BT_PLUGIN_EXPORT )
set_target_properties(movebase_node_dyn PROPERTIES LIBRARY_OUTPUT_DIRECTORY
${BTCPP_BIN_DESTINATION} )

######################################################
# INSTALL plugins for other packages to load

INSTALL(TARGETS
crossdoor_nodes_dyn
dummy_nodes_dyn
movebase_node_dyn
LIBRARY DESTINATION share/${PROJECT_NAME}/bt_plugins
ARCHIVE DESTINATION share/${PROJECT_NAME}/bt_plugins
RUNTIME DESTINATION share/${PROJECT_NAME}/bt_plugins
)
8 changes: 8 additions & 0 deletions sample_nodes/crossdoor_nodes.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,3 +74,11 @@ void CrossDoor::reset()
_door_locked = true;
_pick_attempts = 0;
}

// This function must be implemented in the .cpp file to create
// a plugin that can be loaded at run-time
BT_REGISTER_NODES(factory)
{
static CrossDoor cross_door;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you think of a better pattern to show here that keeps this object in scope (same thing here)? I plan to make lots of Behaviors that share objects (to keep them from being duplicated across multiple behaviors in the tree) and feel like there might be a better way than making them static.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually, I don't believe this is a good pattern. You should probably create the object "outside" and pass it as an argument.

Let me think about it and propose a different pattern

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To continue with my general executor I'm proposing here I think we would need the option to transfer the ownership to the factory, or something else within BT.CPP, to keep if from requiring prior knowledge of objects the Behaviors need while loading plugins.

I'm not sure how similar this situation is but one pattern that comes to mind is in MTC. When assembling tasks you create an object to store stages and then add/move unique pointers the user creates to it.

cross_door.registerNodes(factory);
}
Loading