BehaviorTree.CPP v3从动态库加载叶节点

BehaviorTree.CPP v3从动态库加载叶节点

问题汇总

找不到生成的包含叶节点的动态库

terminate called after throwing an instance of 'BT::RuntimeError'
  what(): could not load library: libWaitActionBtNode.so: cannot open shared object file: No such file or directory

问题原因:
传递到BT::BehaviorTreeFactory::registerFromPlugin()函数中的路径并不是绝对路径。
解决办法:

  1. 传递动态库的绝对路径(推荐)
  2. 或使用相对于执行位置的相对路径。

无法定位其他第三方依赖库的符号

terminate called after throwing an instance of 'BT::RuntimeError'
  what(): could not load library: libWaitActionBtNode.so: undefined symbol: _ZN13rclcpp_action10ClientBase33get_number_of_ready_subscriptionsEv

问题原因:
在我的工程中,实际依赖了ROS2包rclcpp_action,但却没有在CMakeLists.txt中标明,这虽然没有在生成libWaitActionBtNode.so的时候报错,但是却在动态加载时出错。
解决办法:
CMakeLists.txt增加以下内容

find_package(rclcpp REQUIRED)
find_package(rclcpp_action REQUIRED)

让cmake查找依赖包,然后在add_library(WaitActionBtNode Shared src/action/WaitAction.cpp)后添加

ament_target_dependencies(WaitActionBtNode
    rclcpp
    rclcpp_action
)

找不到叶节点导出符号BT_RegisterNodesFromPlugin

ERROR loading library: can't find symbol [BT_RegisterNodesFromPlugin]

问题原因
BehaviorTree规定,定义叶节点so库,需要调用一个宏BT_REGISTER_NODES,原型如下

#
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值