模块化生成SDF模型: xacro4sdf

1. SDF建模简介

在使用ROS进行机器人开发的时候,仿真是非常重要的一个环境,而Gazebo是与ROS兼容性最好的仿真器之一。在使用Gazebo仿真的时候,需要先对环境和机器人进行建模,而Gazebo仿真建模的标准格式就是SDF(sdformat),ROS中机器人的描述标准格式为URDF,两者均采用xml语言,在一定程度上具有一定相似性,但是是不兼容的。至于SDF与URDF的选择,以及为什么选择SDF,可以参考 小明工坊 的文章,总结的非常好,这里不再重复。

  • 为什么选择SDF?
  • SDF规范文档与模型资源
  • SDF的建模与使用
  • ERB:模块化生成SDF模型
  • SDF与URDF的相互转换

SDF文件采用xml语言编写,直接编写sdf文件非常不友好。

URDF也是采用xml语言编写,但是采用xacro工具,可以定义宏变量与宏模块,然后复用这些变量和宏模块,基于宏的方式的使得编写xml变得相对友好,既减少了代码量,又节省了建模时间。

  • 先编写robot.xacro,然后使用xacro工具,解析生成robot.urdf文件。

不幸的是xacro不支持sdf文件的宏定义的书写,小明工坊 提到的ERB:模块化生成SDF模型的方法是基于ERB的方案,明显感觉不如xacro使用方便,然后目前网上也没发现有为sdf开发出一个类似于xacro的插件,于是,自己动手,丰衣足食,便由此产生了xacro4sdf插件。

  • xacro4sdf开源地址:https://github.com/gezp/xacro4sdf

2 xacro4sdf的安装

pip安装方式

#install by pip
pip install xacro4sdf 

源码安装方式

# install from source code
git clone https://github.com/gezp/xacro4sdf.git
cd xacro4sdf && sudo python3 setup.py install

3 xacro4sdf的简单介绍

xacro4sdf支持类似于xacro的Properties和Macros的功能,通过定义宏,然后使用宏,极大复用了代码,即减少了代码量,又节省了建模时间。虽然xacro4sdf开发灵感来源于xacro,但是使用API完全不同于xacro,一方面功能相对更加少,不支持block参数等,另一方面使用相对也更加简单。
xacro4sdf支持tag

  • :变量定义
  • :宏模块定义
  • :宏模块使用
  • :引用其他文件中的
  • :引用其他文件中的model,即...之间的内容。(不推荐使用)

xacro4sdf支持${xxx}方式的数学表达式

  • 与xacro使用方式类似。

xacro4sdf还提供了一些预定义的宏,可直接使用












4 xacro4sdf的简单使用

首先编写一个sdf.model.xacro文件(必须.xacro结尾)



    
    
    
    
        
        ${m}
        
            ${m*(y*y+z*z)/12}
            0
            0
            ${m*(x*x+z*z)/12}
            0
            ${m*(x*x+y*y)/12}
        
        
    
    
        
            
                0 0 0.02 0 0 0
                
            
            
                
            
            
                
            
        
    
      
  • 其中inertia_boxgeometry_mesh 为预定义好的宏,可直接使用,这里重新定义了宏inertia_box ( 即覆盖了预定义的宏,这里只是为了演示的使用)

使用xacro4sdf进行转化

xacro4sdf model.sdf.xacro

生成的model.sdf结果如下







  
  
    
    
        
            
                0 0 0.02 0 0 0
                0.5
                
                    0.01041666666666667
                    0
                    0
                    0.008333333333333335
                    0
                    0.005416666666666668
                
            
            
                
                    
                        model://rplidar_a2/meshes/rplidar_a2.dae
                    
                
            
            
                
                    
                        model://rplidar_a2/meshes/rplidar_a2.dae
                    
                
            
        
    

  • 更多使用详情参考https://github.com/gezp/xacro4sdf中的readme.md。

5. 最后

SDF建模小Tip:

  • 先使用SW,blender等3D建模工具进行建模,然后再把各个模块(依照可活动关节分离)导出STL或dea文件。
  • 然后编写SDF文件(采用xacro4sdf 宏工具可简化SDF文件编写),使用xacro4sdf可轻松采用模块化的建模方式,可分成几个文件分别构建模块,然后再进行组装。



如果你觉得xacro4sdf工具对你有用的话,希望可以在GitHub上给一个star. (●'◡'●)

  • https://github.com/gezp/xacro4sdf

你可能感兴趣的:(模块化生成SDF模型: xacro4sdf)