四 控制自己的机器人(在模拟器上面)

接下来我们要控制自己的小狗咯。

为此我们要写一个控制器描述文件 toydog_control.yaml

toydog:
 # Publish all joint states -----------------------------------                                       
  joint_state_controller:
    type: joint_state_controller/JointStateController
    publish_rate: 50


 # Position Controllers ---------------------------------------                                      
  joint1_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint1
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint2_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint2
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint3_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint3
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint4_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint4
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint5_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint5
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint6_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint6
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint7_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint7
    pid: {p: 100.0, i: 0.01, d: 10.0}
  joint8_position_controller:
    type: effort_controllers/JointPositionController
    joint: joint8
    pid: {p: 100.0, i: 0.01, d: 10.0}

需要注意的地方是最上面的toydog是一个名字域,跟之后的launch文件对应,然后每个joint,比如说joint1-8 是跟urdf里面joint名字一一对应的(否则就不知道哪个控制器对应哪个关节了对不?)

launch文件如下所示:

<launch>

  <!-- Load joint controller configurations from YAML file to parameter server -->
  <rosparam file="$(find mytoy)/config/toydog_control.yaml" command="load"/>

  <!-- load the controllers -->
  <node name="controller_spawner" pkg="controller_manager" type="spawner" respawn="false"
        output="screen" ns="/toydog" args="joint_state_controller                                     
                                          joint1_position_controller                                  
                                          joint2_position_controller                                  
                                          joint3_position_controller                                  
                                          joint4_position_controller                                  
                                          joint5_position_controller                                  
                                          joint6_position_controller                                  
                                          joint7_position_controller                                  
                                          joint8_position_controller"/>

  <!-- convert joint states to TF transforms for rviz, etc -->
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"
        respawn="false" output="screen">
    <remap from="/joint_states" to="/toydog/joint_states" />
  </node>

</launch>

这里的ns = "/toydog" 就是跟yaml最上面对应的,然后是每个控制器所对应的名字

然后我们roslaunch 一下test_urdf.launch 和 上面的launch文件

gazebo应该就会跑出来了,为了控制我们的小狗,我们还需要给关节命令

另开一个终端执行

rosrun rqt_gui rqt_gui

在菜单栏找到Plugins, 点击一下,然后找到Topics --> message publisher,再点击一下就会出现下图的窗口

扫描二维码关注公众号,回复: 3289481 查看本文章

在白色窗口上面我们看到topic,点击一下选择想要控制的关节(比如说/toydog/joint1_position_controller/command)然后点一下旁边绿色的"+"号添加要发布的topic

然后点一下topic旁边的小三角填上关节的角度,比如说0.5

最后在topic前面那个选择框那里打个勾,这个topic就开始发布消息拉。

此时可以看到我们的小狗也做出相应的动作

OH~YEAH~~~~~我们的小狗动起来了啦啦啦。

同理我们可以给其他关节不同的角度来控制小狗动喔

猜你喜欢

转载自blog.csdn.net/v1379481/article/details/79437853