Gazebo简介及利用ROS控制gazebo模型

1.gazebo简介

加载特定的world,如

gazebo world/pr2.world

 系统默认的world路径为

/usr/share/gazebo-version/worlds

gazebo指令会运行两种不同的可执行文件,一个是gzserver,另一个是gzclient。前者运行物理更新循环和生成传感器数据,后者生成一个可视化模拟界面。gazebo 使用许多环境变量来定位文件,并设置server和client之间的通信。环境变量的默认值保存路径为/usr/share/gazebo-version/ setup.bash.

2.urdf模型文件

urdf(通用机器人描述格式)是ROS系统中用于描述机器人组件的一个XML文件。

以rrbot为例

机器人名字和可选的xacro的XML命名空间

  

  
    
    
  

增加了一个world的链接和关节,并将将link1固定到世界坐标系上。

  
  
    
      
      
	
      
    

    
      
      
	
      
      
    

    
      
      
      
    
  

gazebo中的计量单位是米和千克。细心的话你会发现中的元素基本是一模一样的,你可以这么理解,collision用于gazebo中显示,visual用于rviz中显示,因此二者一样。至于多出来的一行是通过材料脚本来指定颜色。如果要在gazebo中指定颜色,不能通过脚本的方式,只能手动添加标签。颜色脚本及gazebo添加方法如下


    

    Gazebo/Orange

gazebo中默认的材料源码都在gazebo-version/media/materials/scripts/gazebo.material中。

inretial属性中,origin代表质心,mass代表质量,ixx/yy/zz代表沿该轴的矩。

link2也是类似定义,但在链接与链接之间,要定义一个关节。

  
    
    
    
    
    
  

而且两个非固定链接之间,存在指定的摩擦

  
    0.2
    0.2
    Gazebo/Black
  

3.用ROS控制gazebo模型

如果只启动主节点而没有加载控制,那么rrbot会处于自然下垂状态

Gazebo简介及利用ROS控制gazebo模型_第1张图片

 ROS提供ros_control功能包来实现与gazebo的通信和控制。通过ros_control能够设置模拟控制器驱动机器人实现运动。执行下述指令进行安装

sudo apt-get install ros-kinetic-ros-control ros-kinetic-ros-controllers

 使用ros_control需要在urdf中添加额外的元素用来驱动关节。

  
    transmission_interface/SimpleTransmission
    
      hardware_interface/EffortJointInterface
    
    
      hardware_interface/EffortJointInterface
      1
    
  

其中joint name对应关节名,type表示传输类型,hardwareInterface包含在中表示硬件接口加载的插件。除了transmission标签外,还需要添加的是plugin插件,通过一个额外可拓展的插件架构允许用户创建ros_control和gazebo间机器人硬件接口。默认插件如下:

  
    
      /rrbot
    
  

最后,需要给ros_control控制器创建一个配置文件和启动文件 ,启动文件和

cd catkin_ws/src
catkin_create_pkg rrbot_control ros_control ros_controllers
cd rrbot_control
mkdir config
mkdir launch
cd config
gedit rrbot_control.yaml
rrbot:
  # 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}

 

cd ../launch 
gedit rrbot_control.launch

 



  
  

  
  

  
  
    
  


rosparam通过加载一个YAML配置文件将参数加载到参数服务器。controller_spawner节点通过运行脚本调用ros_control控制管理器启动两个关节的位置控制器。第三个控制器通过hardware_interfaces将所有关节状态信息发布在/joint_states的话题上。

运行

roslaunch rrbot_gazebo rrbot_world.launch
roslaunch rrbot_control rrbot_control.launch
roslaunch rrbot_control rrbot_rqt.launch

结果如图Gazebo简介及利用ROS控制gazebo模型_第2张图片就可以看到关节1以正弦方式运动,类似可以发布对关节2的控制。

你可能感兴趣的:(ROS)