天天看點

ROS | xacro模型—阿克曼(Ackermann)四輪小車模型1. 模型描述2. xacro模型與URDF模型的差別3. xacro優化方法4. 建立xacro檔案5. xacro模型顯示

ROS | xacro模型—阿克曼(Ackermann)四輪小車模型

  • 1. 模型描述
  • 2. xacro模型與URDF模型的差別
    • 2.1 URDF模型存在的問題
    • 2.2 xacro模型的特點
  • 3. xacro優化方法
    • 3.1 常量定義
    • 3.2 常量使用
    • 3.3 宏定義
    • 3.4 宏調用
    • 3.5 檔案包含
  • 4. 建立xacro檔案
  • 5. xacro模型顯示
    • 5.1 将xacro檔案轉化成URDF檔案
    • 5.2 直接調用xacro檔案解析器
    • 5.3 啟動Rviz

Github連結: https://github.com/chanchanchan97/ROS

1. 模型描述

本項目的目的是建立一個基于阿克曼轉向機構(Ackermann steering)的自動駕駛小車模型,該模型在之前URDF模型的基礎上修改了前輪轉向軸的形狀與位置,修改了前端攝像頭的位置和尺寸,并且添加了雷射雷達和樹莓派的簡易模型。

2. xacro模型與URDF模型的差別

2.1 URDF模型存在的問題

(1) 模型冗長,重複内容過多;

(2) 參數修改麻煩,不便于二次開發;

(3) 沒有參數計算功能。

2.2 xacro模型的特點

(1) 精簡模型代碼

  • 建立宏定義
  • 檔案包含

(2) 提供可程式設計接口

  • 常量
  • 變量
  • 數學計算
  • 條件語句

3. xacro優化方法

3.1 常量定義

<xacro:property name="M_PI" value="3.14159"/>
           

定義标簽:xacro:property後面跟兩個參數屬性:

  • name所定義的常量名;
  • value常量名對應的常量值。

3.2 常量使用

<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
           

定義标簽:

${ }在括号裡使用常量,也可以進行數學運算(所有數學運算都會轉換成浮點數進行,以保證運算精度)。

3.3 宏定義

<xacro:macro name="cylinder_inertial_matrix" params="m r h">
	<inertial>
		<mass value="${m}" />
		<inertia ixx="${m*(3*r*r+h*h)/12}" ixy = "0" ixz = "0"
				 iyy="${m*(3*r*r+h*h)/12}" iyz = "0"
				 izz="${m*r*r/2}" /> 
	</inertial>
</xacro:macro> 
           

定義标簽:xacro:macro 後面跟兩個參數屬性:

  • name宏定義的名字類似函數名;
  • params類似函數參數,也可以是字元串。

3.4 宏調用

<cylinder_inertial_matrix m="1" r="0.025" h="0.02"/>
           

定義标簽:

首先調用宏定義的名字,然後為參數指派。

3.5 檔案包含

<xacro:include filename="$(find smartcar_description)/urdf/xacro/smartcar_sim.xacro"/>
           

定義标簽:

xacro:include $(find+功能包)=包的具體路徑

4. 建立xacro檔案

在urdf檔案夾下建立一個新的檔案夾xacro,并且在xacro檔案夾中建立一個.xacro檔案。

5. xacro模型顯示

5.1 将xacro檔案轉化成URDF檔案

在xacro檔案夾中打開一個新的終端,輸入以下指令:

$ rosrun xacro xacro.py smartcar.xacro > smartcar.urdf
           

此時xacro檔案夾下會生成一個.urdf檔案。

ROS | xacro模型—阿克曼(Ackermann)四輪小車模型1. 模型描述2. xacro模型與URDF模型的差別3. xacro優化方法4. 建立xacro檔案5. xacro模型顯示

5.2 直接調用xacro檔案解析器

這種方法更為常見,在launch檔案中加入如下代碼,進而實作.xacro檔案的轉換。

<arg name="urdf_file" default="$(find xacro)/xacro --inorder '$(find smartcar_description)/urdf/xacro/smartcar.xacro'" />
	
<param name="robot_description" command="$(arg urdf_file)" />
           

5.3 啟動Rviz

打開一個新的終端,輸入以下指令,啟動Rviz,檢視所建立的模型。

$ roslaunch smartcar_description smartcar_rviz.launch
           
ROS | xacro模型—阿克曼(Ackermann)四輪小車模型1. 模型描述2. xacro模型與URDF模型的差別3. xacro優化方法4. 建立xacro檔案5. xacro模型顯示

繼續閱讀