ROS-2-URDF

1.创建.xml文件形式的模型
首先确保安装了 joint_state_publisher package
简单的urdf模型代码如下:



   //底座
    
      
         //圆柱体的半径和高度
      
    
  

$ roslaunch urdf_tutorial display.launch model:=urdf/01-myfirst.urdf

上面的代码将会执行以下的任务:
将制定的模型载入parameter server;运行一些nodes来发布sensor_msgs/JointState消息以及坐标变化;运行Rviz
roslaunch假定我们是在urdf_tutorial directory情况下启动的,此时urdf是当前工作目录的直接子目录,如果不是这样的话01-myfirst.urdf的相对路径将无效,并且一旦roslaunch尝试将urdf加载到参数服务器,您就会收到错误。所以可以做如下更改:

$ roslaunch urdf_tutorial display.launch model:='$(find urdf_tutorial)/urdf/01-myfirst.urdf'

为模型添加joint来使两个part连接:



  
    
      
        
      
    
  

  
    
      
        
      
    
  

  
    
    
  


roslaunch urdf_tutorial display.launch model:=urdf/02-multipleshapes.urdf 

但是这样建立的模型有问题,因为新添加的part是以原来的基座原点为自己的中心,所以下面我们要为它指定一个新的中心:



  
    
      
        
      
    
  

  
    
      
        
      
      //part绕原点旋转pi/2,沿Z向下平移0.3m
    
  

  
    
    
      坐标原点沿y移动-0.22,z移动0.25
  


roslaunch urdf_tutorial display.launch model:=urdf/03-origins.urdf 

之后为机器人添加材料属性




   //调制颜色[0,1]
    
  

  
    
  


  
    
      
        
      
      
    
  

  
    
      
        
      
      
      
    
  

  
    
    
    
  

  
    
      
        
      
      
      
    
  

  
    
    
    
  


roslaunch urdf_tutorial display.launch model:=urdf/04-materials.urdf 

之后为机器人添加一些mesh





    
  
  
    
  
  
    
  

  
    
      
        
      
      
    
  

  
    
      
        
      
      
      
    
  

  
    
    
    
  

  
    
      
        
      
      
    
  

  
    
    
    
  

  
    
      
      
        
      
      
      
    
  
  
    
    
    
  

  
    
      
      
        
      
      
    
  
  
    
    
    
  

  
    
      
        
      
      
      
    
  

  
    
    
    
  

  
    
      
        
      
      
    
  

  
    
    
    
  

  
    
      
      
        
      
      
    
  
  
    
    
    
  

  
    
      
      
        
      
      
    
  
  
    
    
    
  

  
    
    
    
  

  
    
      
        
      
      
    
  

  
    
    
    
  

  
    
      
      
        
      
    
  

  
    
    
  

  
    
      
      
        
      
    
  
  
    
    
    
  

  
    
      
      
        
      
    
  

  
    
    
  

  
    
      
      
        
      
    
  

  
    
      
        
      
      
    
  
  
    
    
    
  

  
    
      
        
      
      
    
  

  
    
    
    
  

roslaunch urdf_tutorial display.launch model:=urdf/05-visual.urdf 

添加mesh文件的后缀名可以是多种的例如STL,DAE,实例中的mesh存放在urdf_tutorial的mesh文件夹中
也可以使用其他package中的mesh文件如:

package://pr2_description/meshes/gripper_v0/l_finger.dae 

2.建立可移动的模型
之前我们添加的joint都是fixed类型的,但是joint实际上有:continuous, revolute ,prismatic类型,以下对这些进行介绍。执行以下代码:

roslaunch urdf_tutorial display.launch model:=urdf/06-flexible.urdf 

之后跳出来调控面板GUI,其中各个位置所用的joint类型如下所示:
Head: 像滚轮一样的joint,可以360°旋转,不过需要再axis中指定旋转轴

  
    
    
    
    
  

Gripper:有旋转角度限制的continous,因此我们必须再limit effort下面添加最高和最低角度,同时添加最大速度

  
    
    
    
    
    
  

Gripper Arm: 沿直线运行的滑块类,limit effort限制:力量,手臂伸出和缩回的距离,最大移动速度

  
    
    
    
    
  

除了这些之外还有planar joint, floating joint等
当滑动GUI上面的滑块时,他将会发送sensor_msgs/JointState类型的消息,这些消息会被robot_state_publisher所使用,并且计算出机器人不同parts之间应有的transform,计算出的transform TREE 会被Rviz所使用,从而显示出机器人的状态。
3. 添加质量和转动惯量矩阵:

  
    
      
        
      
      
        
      
    
    
      
        
      
    
    
      
      
    
  

惯性张量取决于物体的质量和质量分布,如果不确定放置什么,ixx / iyy / izz = 1e-3或更小的矩阵通常是中型链路的合理默认值,使用实时控制器时,零(或几乎为零)的惯性元素可能导致机器人模型在没有警告的情况下崩溃,并且所有link将显示其原点与世界原点一致。
还有一些其他的参数,如:
mu-Friction coefficient
kp - Stiffness coefficient
kd - Dampening coefficient
使用命令

  1. 使用Xacro文件简化urdf文件
    Xacro使用macro语言,使用这种文件需要将文件转换为urdf文件,用法如下:
 rosrun xacro xacro model.xacro > model.urdf 

也可以通过在launch文件中设置,从而避免再次调用rosrun命令,如下所示:


在Xacro文件的顶部,需要建立命名空间以便文件进行编译,如下所示:



之后可以编写文件内容,如下所示:




    
        
            
        
        
    
    
        
            
        
    

property是初始化变量的关键字,可以通过符号${width}来进行调用,之后该符号以及括号内的东西会被name所对应的value进行文本替换,在这个符号内的运算以浮点数进行。
之后可以使用宏来进一步替换文本,宏的关键字是macro,如下所示,name为宏的名称


    


在宏中还可以添加参数,只需要在调用宏的时候给参数赋值,如下所示就是一个宏:

    
        
                
                
        
    

调用它的命令为:


在宏中还可以添加指针类型来引用一个块,调用的方法为insert_block name,如下所示:


    
        
            
                
            
            
        
        
            
                
            
        
    



    

可以通过执行以下代码查看实例中的模型:

roslaunch urdf_tutorial display.launch model:=urdf/08-macroed.urdf.xacro

对于一些对称形状的物体,我们可以使用一些数学方法来缩短代码,如下面的代码所示:


    
        
            
                
            
            
            
        
        
            
                
            
            
        
        
    

    
        
        
        
    
    



你可能感兴趣的:(ROS-2-URDF)