Gazebo之ros_control

http://gazebosim.org/tutorials/?tut=ros_control

1.向URDF添加插件

对于gazebo_ros_control插件来说,transmission中重要的信息tag如下:

- name必须于URDF中其它地方的joint对应
- transmission类型,目前仅仅实现了"transmission_interface/SimpleTransmission",当然你可以自己根据需求添加
- 放置在 tags之内,用来告知gazebo_ros_control插件哪些硬件接口要加载进来(position, velocity or effort interfaces),目前仅effort接口被实现, 根据需要可自行添加其它接口
2.gazebo_ros_control plugin

除了传输标记之外,还需要在URDF中添加Gazebo插件,该插件实际解析传输标记并加载适当的硬件接口和控制器管理器。默认情况下,gazebo_ros_control插件非常简单,不过它也可以通过一个额外的插件体系结构进行扩展,允许高级用户在ros_control和Gazebo之间创建自己的自定义机器人硬件接口。
默认的插件XML应该添加到您的URDF:


  
    /MYROBOT
  

1)gazebo_ros_control tag有下面几个可选属性:

: 插件实例的ROS命名空间, 在URDF/SDF文件缺省是机器人名字
: controller更新周期update (in seconds), 缺省是Gazebo的period
: 参数服务器robot_description (URDF)的位置,缺省是'/robot_description'
: robot sim interface插件名字  (详细见下面), 缺省是 'DefaultRobotHWSim'

2)缺省的gazebo_ros_control的行为:

    在缺省情况下,没有 tag, gazebo_ros_control会尝试获取它需要的所有接口以实现与基于ros_control的controller通信。

    在缺省情况下,它的行为提供如下ros_control接口:

hardware_interface::JointStateInterface
hardware_interface::EffortJointInterface
hardware_interface::VelocityJointInterface - not fully implemented

3)高级gazebo_ros_control的行为(自定义gazebo_ros_control插件):

    gazebo_ros_control插件也提供了基于pluginlib的接口,这样方便Gazebo和ros_control之间的自定义硬件接口,以仿真更加复杂的机构(如非线性弹簧,连杆等等)。

    自定义的新插件必须继承gazebo_ros_control::RobotHWSim, 它是仿真的hardware_interface::RobotHW。 RobotHWSim提供的API可以实现对Gazebo模拟器中joint的读和写。

各个RobotHWSim子类在URDF模型中指定,并在加载机器人模型时加载。例如,下面的XML将加载默认插件(与不使用标记 tag情况相同):


  
    /MYROBOT
    gazebo_ros_control/DefaultRobotHWSim
  

uarm_gazebo_control.launch



  
  

  
  

  
  
    
  

 

第一行“rosparam”通过加载YAML配置文件(在下一节中讨论)将控制器设置加载到参数服务器

该脚本对ros_control控制器管理器进行服务调用。服务调用告诉控制器管理器您想要哪个控制器。它还加载第三个控制器,该控制器使用hardware_interface发布所有关节的关节状态,并在/joint_states上发布主题,

最后一行启动robot_state_publisher节点,该节点只侦听来自join_state_controller的/joint_states消息,然后将转换发布到/tf。这允许您在Rviz中查看模拟机器人,并执行其他任务。

你可能感兴趣的:(ROS,gazebo)