您的位置:首页 > 其它

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

2018-03-04 16:57 239 查看
接下来我们要控制自己的小狗咯。
为此我们要写一个控制器描述文件 toydog_control.yamltoydog:
# 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,再点击一下就会出现下图的窗口



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



最后在topic前面那个选择框那里打个勾,这个topic就开始发布消息拉。
此时可以看到我们的小狗也做出相应的动作



OH~YEAH~~~~~我们的小狗动起来了啦啦啦。
同理我们可以给其他关节不同的角度来控制小狗动喔
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: