模塊化生成SDF模型: xacro4sdf

1. SDF建模簡介

在使用ROS進行機器人開發(fā)的時候前酿,仿真是非常重要的一個環(huán)境珊佣,而Gazebo是與ROS兼容性最好的仿真器之一副砍。在使用Gazebo仿真的時候溜歪,需要先對環(huán)境和機器人進行建模抄肖,而Gazebo仿真建模的標準格式就是SDF(sdformat)久信,ROS中機器人的描述標準格式為URDF,兩者均采用xml語言漓摩,在一定程度上具有一定相似性裙士,但是是不兼容的。至于SDF與URDF的選擇管毙,以及為什么選擇SDF腿椎,可以參考 小明工坊 的文章,總結的非常好夭咬,這里不再重復啃炸。

SDF文件采用xml語言編寫卓舵,直接編寫sdf文件非常不友好南用。

URDF也是采用xml語言編寫,但是采用xacro工具掏湾,可以定義宏變量與宏模塊裹虫,然后復用這些變量和宏模塊,基于宏的方式的使得編寫xml變得相對友好融击,既減少了代碼量筑公,又節(jié)省了建模時間。

  • 先編寫robot.xacro尊浪,然后使用xacro工具匣屡,解析生成robot.urdf文件涩拙。

不幸的是xacro不支持sdf文件的宏定義的書寫,小明工坊 提到的ERB:模塊化生成SDF模型的方法是基于ERB的方案耸采,明顯感覺不如xacro使用方便,然后目前網(wǎng)上也沒發(fā)現(xiàn)有為sdf開發(fā)出一個類似于xacro的插件工育,于是虾宇,自己動手,豐衣足食如绸,便由此產生了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的功能,通過定義宏怔接,然后使用宏搪泳,極大復用了代碼,即減少了代碼量扼脐,又節(jié)省了建模時間岸军。雖然xacro4sdf開發(fā)靈感來源于xacro,但是使用API完全不同于xacro瓦侮,一方面功能相對更加少艰赞,不支持block參數(shù)等,另一方面使用相對也更加簡單肚吏。<br />xacro4sdf支持tag

  • <xacro_define_property> :變量定義
  • <xacro_define_macro> :宏模塊定義
  • <xacro_macro> :宏模塊使用
  • <xacro_include_definition> :引用其他文件中的<xacro_define_property><xacro_define_macro>
  • <xacro_include_model> :引用其他文件中的model方妖,即<model>...</model>之間的內容。(不推薦使用)

xacro4sdf支持${xxx}方式的數(shù)學表達式

  • 與xacro使用方式類似罚攀。

xacro4sdf還提供了一些預定義的宏党觅,可直接使用

<!--macro defination:inertia-->
<xacro_define_macro name="inertia_cylinder" params="m r l">
<xacro_define_macro name="inertia_box" params="m x y z">
<xacro_define_macro name="inertia_sphere" params="m r">
<!--macro defination:geometry-->
<xacro_define_macro name="geometry_cylinder" params="r l">
<xacro_define_macro name="geometry_box" params="x y z">
<xacro_define_macro name="geometry_sphere" params="r">
<xacro_define_macro name="geometry_mesh" params="uri">
<!--macro defination:visual_collision_with_mesh-->
<xacro_define_macro name="visual_collision_with_mesh" params="prefix uri">

4 xacro4sdf的簡單使用

首先編寫一個sdf.model.xacro文件(必須.xacro結尾)

<?xml version="1.0"?>
<sdf version="1.7">
    <!--definition of property-->
    <xacro_define_property name="h" value="0.2" />
    <xacro_define_property name="mass" value="0.2" />
    <!--definition of macro-->
        <xacro_define_macro macro_name="inertia_box" params="m x y z">
        <mass>${m}</mass>
        <inertia>
            <ixx>${m*(y*y+z*z)/12}</ixx>
            <ixy>0</ixy>
            <ixz>0</ixz>
            <iyy>${m*(x*x+z*z)/12}</iyy>
            <iyz>0</iyz>
            <izz>${m*(x*x+y*y)/12}</izz>
        </inertia>
        </xacro_define_macro>
    <!--rplidar a2-->
    <model name='rplidar_a2'>
        <link name="link">
            <inertial>
                <pose>0 0 0.02 0 0 0</pose>
                <xacro_macro name="inertia_box" m="0.5" x="${h}" y="${h+0.1}" z="${2*h}"/>
            </inertial>
            <collision name="collision">
                <xacro_macro name="geometry_mesh" uri="model://rplidar_a2/meshes/rplidar_a2.dae"/>
            </collision>
            <visual name="visual">
                <xacro_macro name="geometry_mesh" uri="model://rplidar_a2/meshes/rplidar_a2.dae"/>
            </visual>
        </link>
    </model>
</sdf>      
  • 其中inertia_boxgeometry_mesh 為預定義好的宏,可直接使用斋泄,這里重新定義了宏inertia_box ( 即覆蓋了預定義的宏杯瞻,這里只是為了演示<xacro_define_macro>的使用)

使用xacro4sdf進行轉化

xacro4sdf model.sdf.xacro

生成的model.sdf結果如下

<?xml version="1.0" encoding="UTF-8"?>
<!-- =================================================================================== -->
<!-- |    This document was autogenerated by xacro4sdf from model.sdf.xacro            | -->
<!-- |    EDITING THIS FILE BY HAND IS NOT RECOMMENDED                                 | -->
<!-- =================================================================================== -->
<sdf version="1.7">
  <!--definition of property-->
  <!--definition of macro-->
    <!--rplidar a2-->
    <model name="rplidar_a2">
        <link name="link">
            <inertial>
                <pose>0 0 0.02 0 0 0</pose>
                <mass>0.5</mass>
                <inertia>
                    <ixx>0.01041666666666667</ixx>
                    <ixy>0</ixy>
                    <ixz>0</ixz>
                    <iyy>0.008333333333333335</iyy>
                    <iyz>0</iyz>
                    <izz>0.005416666666666668</izz>
                </inertia>
            </inertial>
            <collision name="collision">
                <geometry>
                    <mesh>
                        <uri>model://rplidar_a2/meshes/rplidar_a2.dae</uri>
                    </mesh>
                </geometry>
            </collision>
            <visual name="visual">
                <geometry>
                    <mesh>
                        <uri>model://rplidar_a2/meshes/rplidar_a2.dae</uri>
                    </mesh>
                </geometry>
            </visual>
        </link>
    </model>
</sdf>

5. 最后

SDF建模小Tip:

  • 先使用SW是己,blender等3D建模工具進行建模又兵,然后再把各個模塊(依照可活動關節(jié)分離)導出STL或dea文件。
  • 然后編寫SDF文件(采用xacro4sdf 宏工具可簡化SDF文件編寫)卒废,使用xacro4sdf可輕松采用模塊化的建模方式沛厨,可分成幾個文件分別構建模塊,然后再進行組裝摔认。



如果你覺得xacro4sdf工具對你有用的話逆皮,希望可以在GitHub上給一個star. (●'?'●)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市参袱,隨后出現(xiàn)的幾起案子电谣,更是在濱河造成了極大的恐慌秽梅,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剿牺,死亡現(xiàn)場離奇詭異企垦,居然都是意外死亡,警方通過查閱死者的電腦和手機晒来,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門钞诡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人湃崩,你說我怎么就攤上這事荧降。” “怎么了攒读?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵朵诫,是天一觀的道長。 經(jīng)常有香客問我薄扁,道長剪返,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任泌辫,我火速辦了婚禮随夸,結果婚禮上,老公的妹妹穿的比我還像新娘震放。我一直安慰自己宾毒,他們只是感情好,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布殿遂。 她就那樣靜靜地躺著诈铛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪墨礁。 梳的紋絲不亂的頭發(fā)上幢竹,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機與錄音恩静,去河邊找鬼焕毫。 笑死,一個胖子當著我的面吹牛驶乾,可吹牛的內容都是我干的邑飒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼级乐,長吁一口氣:“原來是場噩夢啊……” “哼疙咸!你這毒婦竟也來了?” 一聲冷哼從身側響起风科,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤撒轮,失蹤者是張志新(化名)和其女友劉穎乞旦,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體题山,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡兰粉,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了顶瞳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亲桦。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖浊仆,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情豫领,我是刑警寧澤抡柿,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站等恐,受9級特大地震影響洲劣,放射性物質發(fā)生泄漏。R本人自食惡果不足惜课蔬,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一囱稽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧二跋,春花似錦战惊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谚鄙,卻和暖如春各拷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闷营。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工烤黍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人傻盟。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓速蕊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親莫杈。 傳聞我的和親對象是個殘疾皇子互例,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內容