使用ROS中的urdf構(gòu)建機器人小車的3D模型

本文介紹如何在ROS中使用urdf創(chuàng)建機器人3D模型谴垫。

準(zhǔn)備工作

  1. 操作環(huán)境:AutolaborOS 下載安裝教程
  2. 機器人3D模型:Autolabor 2.5 stl 文件 下載

移動機器人小車3D模型的構(gòu)建

  1. 介紹
  2. 創(chuàng)建硬件描述包
  3. 繪制機器人小車模型
  4. 建立urdf文件
  5. 建立launch文件命令
  6. 效果展示

1. 介紹

機器人的3D模型在ROS中是通過URDF文件實現(xiàn),URDF(Unified Robot Description Format)就是描述機器人硬件尺寸布局的模型語言起惕。它是同ROS通信的渠道盛嘿,通過機器人的物理尺寸來配置機器人模型,ROS就可以有效的進(jìn)行自主導(dǎo)航(Navagation)和碰撞檢測(collision detect)了。

2. 創(chuàng)建硬件描述包

在ROS中熄求,所有的ROS軟件(包括我們創(chuàng)建的軟件)都被組織成軟件包的形式。因此逗概,在工作空間catkin_ws/src/目錄下通過catkin_create_pkg來創(chuàng)建硬件描述包:

$ catkin_create_pkg autolabor_description urdf

通過catkin_create_pkg創(chuàng)建了一個autolabor_description的包弟晚,該命令的最后一個參數(shù)是引入urdf庫。

ROS中創(chuàng)建包詳情請參考:http://wiki.ros.org/ROS/Tutorials/CreatingPackage

在新建的包中創(chuàng)建 urdf 和 launch 文件夾用于存儲 *.urdf 和 *.launch 文件逾苫∏涑牵可以在catkin_ws/src/目錄下看到:

3. 繪制機器人小車的3D模型

(當(dāng)然,這一步并不是必要的铅搓,你也可以通過配置urdf文件來得到小車的模型瑟押,詳情參考第四步)
通過機器人小車的物理參數(shù),使用3D制圖軟件繪制機器人小車的3D模型

在autolabor_description包的目錄下狸吞,新建meshes文件夾勉耀,將繪制的3D模型復(fù)制到在路徑下

4. 建立urdf文件

在urdf文件夾下創(chuàng)建文件 autolabor_description.urdf文件指煎,并將下列代碼放在 autolabor_description.urdf文件中

如果繪制了3D模型,建立urdf文件

 <robot name="autolabor_description"> 
    <link name="base_link">
    <inertial>
      <origin
        xyz="0. 0. 0."
        rpy="0. 0. 0." />
      <mass
        value="0.251988675650349" />
      <inertia
        ixx="0.000595579869264794"
        ixy="5.99238175321912E-08"
        ixz="-1.98242615307314E-08"
        iyy="0.00102462329604677"
        iyz="-1.73115625503396E-05"
        izz="0.00060561972360446" />
    </inertial>
    <visual>
      <origin
        xyz="0. 0. 0.05"
        rpy="1.57 0. 1.57" />
      <geometry>
        <mesh
          filename="package://autolabor_description/meshes/base_link.stl" />
      </geometry>
      <material
        name="">
        <color
          rgba="0.792156862745098 0.819607843137255 0.933333333333333 1" />
      </material>
    </visual>
   </link>
   </robot>

如果未繪制3D模型便斥,通過配置urdf來得到模型至壤,這里僅展示一個簡單的example

<?xml version="1.0"?>
<robot name="smartcar">
  <link name="base_link">
    <visual>
      <geometry>
        <box size="0.25 .16 .05"/>
    </geometry>
    <origin rpy="0 0 1.57075" xyz="0 0 0"/>
    <material name="blue">
        <color rgba="0 0 .8 1"/>
    </material>
    </visual>
 </link>

 <link name="right_front_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="right_front_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="right_front_wheel"/>
    <origin rpy="0 1.57075 0" xyz="0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="right_back_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="right_back_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="right_back_wheel"/>
    <origin rpy="0 1.57075 0" xyz="0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
 </joint>

 <link name="left_front_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="left_front_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="left_front_wheel"/>
    <origin rpy="0 1.57075 0" xyz="-0.08 0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="left_back_wheel">
    <visual>
      <geometry>
        <cylinder length=".02" radius="0.025"/>
      </geometry>
      <material name="black">
        <color rgba="0 0 0 1"/>
      </material>
    </visual>
  </link>

  <joint name="left_back_wheel_joint" type="continuous">
    <axis xyz="0 0 1"/>
    <parent link="base_link"/>
    <child link="left_back_wheel"/>
    <origin rpy="0 1.57075 0" xyz="-0.08 -0.1 -0.03"/>
    <limit effort="100" velocity="100"/>
    <joint_properties damping="0.0" friction="0.0"/>
  </joint>

  <link name="head">
    <visual>
      <geometry>
        <box size=".02 .03 .03"/>
      </geometry>
      <material name="white">
          <color rgba="1 1 1 1"/>
      </material>
    </visual>
  </link>

  <joint name="tobox" type="fixed">
    <parent link="base_link"/>
    <child link="head"/>
    <origin xyz="0 0.08 0.025"/>
  </joint>
</robot>

其中配置解釋如下:

<link>對應(yīng)模型的一個模塊,可以通過標(biāo)簽joint讓子模塊與base_link進(jìn)行關(guān)聯(lián);

<visual>描述一個link的外觀枢纠,大小疹蛉,顏色官地,材質(zhì)紋理等;

<geometry>定義該link的幾何模型,包含該幾何模型的尺寸,單位:米思恐;

<box> 矩形摊册,定義屬性:size(包含長寬高乐埠,數(shù)據(jù)用空格隔開)找筝;

<cylinder>  圓柱體,定義屬性:length八千,radius吗讶;

<sphere>  球體,定義屬性:radius恋捆;

<material> 定義顏色和透明度(RGBA)照皆,取值區(qū)間 [0,1] ;

<collision> 描述碰撞檢測屬性沸停;

<origin> 用來描述模塊的位置膜毁;

<inertial> 定義慣性;

5.創(chuàng)建launch命令文件

*.launch文件的作用是:同時啟動多個節(jié)點,使用roslaunch命令運行.launch文件中指定的節(jié)點愤钾。在launch文件夾中創(chuàng)建文件display.launch瘟滨,并編輯,代碼如下:

<launch>
  <arg name="model" />
  <arg name="gui" default="false" />

  <param name="robot_description" textfile="$(find autolabor_description)/urdf/autolabor_description.urdf" />
  <param name="use_gui" value="$(arg gui)" />

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(find autolabor_description)/urdf.rviz" />
</launch>

第一個輸入?yún)?shù) model 就是要啟動的urdf文件路徑绰垂。
第二個輸入?yún)?shù) gui 指定是否啟用關(guān)節(jié)轉(zhuǎn)動控制面板窗口室奏。
兩個參數(shù)表示:分別描述要啟動的模型描述文件(urdf)和關(guān)節(jié)轉(zhuǎn)到控制窗口(gui,對應(yīng)各個joint)劲装。
三個節(jié)點:分別用于發(fā)送joint的信息,robot的控制信息昌简,和rviz的啟動占业。至此,模型搭建完畢纯赎,啟動模型進(jìn)行測試谦疾。

6.效果展示

進(jìn)入工作空間目錄下,編譯文件犬金,使用roslaunch命令來啟動它:

$ cd ~/catkin_ws/
$ source devel/setup.bash
$ catkin_make

$ roslaunch autolabor_description display.launch

在啟動rviz后念恍,需要將上面標(biāo)記的topic的參數(shù)改成上述圖中六剥,否則是無法觀測到的,到此峰伙,就建立并啟動了自己的機器人小車了

autolabor_urdf下載
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末疗疟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子瞳氓,更是在濱河造成了極大的恐慌策彤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匣摘,死亡現(xiàn)場離奇詭異店诗,居然都是意外死亡,警方通過查閱死者的電腦和手機音榜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進(jìn)店門庞瘸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赠叼,你說我怎么就攤上這事擦囊。” “怎么了梅割?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵霜第,是天一觀的道長。 經(jīng)常有香客問我户辞,道長泌类,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任底燎,我火速辦了婚禮刃榨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘双仍。我一直安慰自己枢希,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布朱沃。 她就那樣靜靜地躺著苞轿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪逗物。 梳的紋絲不亂的頭發(fā)上搬卒,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音翎卓,去河邊找鬼契邀。 笑死,一個胖子當(dāng)著我的面吹牛失暴,可吹牛的內(nèi)容都是我干的坯门。 我是一名探鬼主播微饥,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼古戴!你這毒婦竟也來了欠橘?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤允瞧,失蹤者是張志新(化名)和其女友劉穎简软,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體述暂,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡痹升,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了畦韭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疼蛾。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艺配,靈堂內(nèi)的尸體忽然破棺而出察郁,到底是詐尸還是另有隱情,我是刑警寧澤转唉,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布皮钠,位于F島的核電站,受9級特大地震影響赠法,放射性物質(zhì)發(fā)生泄漏麦轰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一砖织、第九天 我趴在偏房一處隱蔽的房頂上張望款侵。 院中可真熱鬧,春花似錦侧纯、人聲如沸新锈。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽妹笆。三九已至,卻和暖如春娜氏,著一層夾襖步出監(jiān)牢的瞬間晾浴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工牍白, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人抖棘。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓茂腥,卻偏偏與公主長得像狸涌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子最岗,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容