You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gazebo加载2个自定义控制器失败问题求助

ROS多控制器插件加载失败求助

我之前成功实现过单个控制器,现在要做两个可选控制器,但启动力控制器时一直报错,翻了很多相关问题没找到解决办法。反复核对宏定义和插件命名,没发现问题,怀疑是漏掉了某些配置。

启动时报错日志:

[ERROR] [1675151078.128963342, 4.702000000]: Could not load class 'my_position_controller/MyEffortPositionController': Failed to load library /home/mikel/twodofrobot/devel/lib//libmy_position_controller_lib.so. 
Make sure that you are calling the PLUGINLIB_EXPORT_CLASS macro in the library code, and that names are consistent between this macro and your XML. 
Error string: Could not load library (Poco exception = /home/mikel/twodofrobot/devel/lib//libmy_position_controller_lib.so: undefined symbol: _ZN22my_position_controller26MyEffortPositionController8stoppingERKN3ros4TimeE)

[ERROR] [1675151078.129065115, 4.702000000]: Could not load controller 'joint_effort_position_controller' because controller type 'my_position_controller/MyEffortPositionController' does not exist.

[ERROR] [1675151078.129110615, 4.702000000]: Use 'rosservice call controller_manager/list_controller_types' to get the available types

以下是相关配置代码:

控制器宏定义

PLUGINLIB_EXPORT_CLASS(my_position_controller::MyEffortPositionController,controller_interface::ControllerBase)

PLUGINLIB_EXPORT_CLASS(my_position_controller::MyJointPositionController, controller_interface::ControllerBase)

package.xml导出配置

<export>
    <!-- Other tools can request additional information be placed here -->
      <controller_interface plugin="${prefix}/my_position_controller_plugin.xml"/>
 </export>

plugin.xml配置

<library path="lib/libmy_position_controller_lib">

  <class name="my_position_controller/MyEffortPositionController" 
        type="my_position_controller::MyEffortPositionController" 
        base_class_type="controller_interface::ControllerBase">
    <description>
      a PID simple controller with effort
    </description>
  </class>

  <class name="my_position_controller/MyJointPositionController" 
        type="my_position_controller::MyJointPositionController" 
        base_class_type="controller_interface::ControllerBase">
    <description>
      a PID simple controller
    </description>
  </class>
</library>

CMakeLists.txt配置

add_compile_options(-std=c++11)
add_library(my_position_controller_lib src/my_effort_position_controller.cpp
                                       src/my_joint_position_controller.cpp)

target_link_libraries(my_position_controller_lib ${catkin_LIBRARIES})

控制器配置文件

rrbot: 
  joint_state_controller: 
  type: joint_state_controller/JointStateController 
  publish_rate: 50

  joint_effort_position_controller:
    type: my_position_controller/MyEffortPositionController
    joint:
        - joint1
        - joint2
    kp: 
      - 10
      - 10
    kd: 
      - 1
      - 1
    ki: 
      - 0.1
      - 0.1

注意到日志里的库路径有双斜杠/home/mikel/twodofrobot/devel/lib//libmy_position_controller_lib.so,不确定是否影响。试过修改库名、命名空间和类名,都没用,求帮忙解决。

内容的提问来源于stack exchange,提问作者MIKEL LASS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 02:50:42