鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    (问题解决)Could not contact service /go2_gazebo/controller_manager/list_controllers

    已定时 已固定 已锁定 已移动
    动手学ROS2
    ros2 ros2control
    1
    1
    32
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • L
      lyylyy123123
      最后由 编辑

      这是我在将宇树四足机器人go2的ros1开源代码移植到ros2时遇到的问题。

      造成这个问题的原因是,在ros2的launch启动文件中,写入了加载控制器节点,但是ros2的controller_manager在搜索控制器时却搜索不到。所以解决本问题的思路是如何让controller_manager知道在哪搜索控制器。

      1)新建xacro文件,添加ros2_control标签,并在标签中定义控制器,并加入你的yaml文件路径。注:如果你也是ros1移植ros2,要注意ros1定义控制器的标签是transmission,在ros2中已经替换成了ros2_control标签,你需要将transmission标签换成ros2_control标签,包括里面的内容也可能需要修改

      <?xml version="1.0"?> 
       
      <robot xmlns:xacro="http://www.ros.org/wiki/xacro">
       
          <!-- 声明宏 -->
          <xacro:macro name="your_controller" params="name">
          <!-- 需要替换成你的名字,可随便起 -->
              <ros2_control name="your_hardware_interface" type="system">
              <!-- 需要替换成你的名字,可随便起 -->
                  <hardware>
                      <plugin>gazebo_ros2_control/GazeboSystem</plugin>
                  </hardware>
       
       
                  <joint name= "your_joint">
                  <!-- 需要替换成你的名字,需与模型文件里的关节名一致 -->
                      <!-- 命令接口:力矩控制 -->
                      <command_interface name="effort">
                          <param name="min">-10.0</param>  <!-- 实际值需根据电机调整 -->
                          <param name="max">10.0</param>  <!-- 单位:牛顿米(N·m) -->
                      </command_interface>
                      <!-- 状态反馈接口 -->
                      <state_interface name="position"/>  <!-- 关节位置 -->
                      <state_interface name="velocity"/>  <!-- 关节速度 -->
                      <state_interface name="effort"/>    <!-- 关节力矩 -->
                  </joint>
       
              </ros2_control>
          </xacro:macro>
          <gazebo>
              <plugin filename="libgazebo_ros2_control.so" name="gazebo_ros2_control">
                  <parameters>$(find your_pkg)/config/your_config.yaml</parameters>
                  <!-- 需要替换成你的包名和路径 -->
              </plugin>
          </gazebo>
      </robot>
      

      2)修改yaml文件格式,确保格式正确

      controller_manager:
        ros__parameters:
          update_rate: 100  # Hz
          use_sim_time: true
       
          # 控制器列表及类型
          joint_state_broadcaster:
            type: joint_state_broadcaster/JointStateBroadcaster
       
          your_controller:
            type: unitree_legged_control/UnitreeJointController
       
       
      # 各个控制器的具体配置
      joint_state_broadcaster:
        ros__parameters:
          # No specific parameters needed for the broadcaster usually
            update_rate: 1000
       
      # FL Controllers Parameters
      your_controller:
            ros__parameters:
       
              joint: your_joint
       
              command_interfaces:
                - effort
       
              state_interfaces:
                - effort
                - position
                - velocity
      #!!!your_controller名字需一致
      

      3)如果你也是ros1迁移ros2,需要注意在xacro文件里的很多插件,如gazebo_ros_control,是ros1提供的插件,但是在ros2中是不能使用的,所以需要对其注释掉或者修改

      1 条回复 最后回复 回复 引用 0
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS