ROS利用Xacro进行机器人建模仿真

理解不深,先能用,再会用

一、理论

(1)URDF

URDF文件用代码写一个机器人描述,其中包括各个零件及关系,比如有啥零件,都怎么动的。

URDF文件编写遵循XML格式

<label>开启标签,</label>结束标签,单行在句尾加 /

urdf描述中包括{link连杆组件}和{joint关节}标签,俩东西组成了robot本体,并且两者还有很多细分的描述,参考下图。

(2)Xacro(XML Macros)

简单的机器人对于URDF几行代码就可以描述出来,有几根杆,怎么动的,什么属性,很轻松。

如果复杂的机器人模型就很吃力了,并且存在很多重复的代码,对编写很不友好

这就是Xacro出现的原因

Xacro同样遵循XML格式,通过使用属性标签<property>与创建宏macro,实现模块化,可重用性,并且支持简单的数学运算,提高编写效率

三要素(掌握这仨,其他对照现成代码照葫芦画瓢)

1-robot起始标签及指定命名空间

<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<!--和URDF一样,需要robot标签-->
<!--定义机器人名字  后面指定了命名空间,空间名为xacro-->

 2-属性标签使用

<xacro:property name="param" value="1314" />
<!--property属性的声明-->
<!--在命名空间xacro下 使用property标签 参数名是param 属性值是1314-->
<sphere radius="${param}" />
<!--proterty属性的调用-->
<!--球型形状sphere  半径参数radius-->
<!--调用前面声明参数param,用${}包起来即调用 属性值1314传入-->

3-宏定义 

<xacro:macro name="macro_name" params="macro_param" >
<!--宏定义 名字macro_name  接受参数macro_param (类似函数输入)-->
<xacro:macro_name macro_param="520" />
<!--宏调用 调用刚才定义的宏macro 输入参数520-->

 

二、实践

(1)URDF实现

1

创建工作空间与功能包并编译

cd ~/桌面
mkdir -p jixiebi_ws/src
cd jixiebi_ws/src
catkin_create_pkg jixiebi urdf xacro
cd jixiebi
mkdir urdf
mkdir launch
cd ~/桌面/jixiebi_ws
catkin_make
source ~/桌面/jixiebi_ws/devel/setup.bash

2

编写urdf文件

cd ~/桌面/jixiebi_ws/src/jixiebi/urdf
gedit first.urdf

复制下面代码,保存退出

<robot name="mycar">
    <link name="base_link">
        <visual>
            <geometry>
                <box size="0.5 0.2 0.1" />
            </geometry>
        </visual>
    </link>
</robot>

3

编写launch文件,并通过rviz显示

cd ~/桌面/jixiebi_ws/src/jixiebi/launch
gedit first.launch

复制下面代码保存退出

<launch>

    <!-- 设置参数 -->
    <param name="robot_description" textfile="$(find jixiebi)/urdf/first.urdf" />

    <!-- 启动 rviz -->
    <node pkg="rviz" type="rviz" name="rviz" />

</launch>

4

重新编译工作空间

cd ~/桌面/jixiebi_ws
catkin_make
source devel/setup.bash

5

运行

cd ~/桌面/jixiebi_ws
source devel/setup.bash
roslaunch jixiebi first.launch

6

在rviz中添加RobotModel可视化,改Fixed Frame为base_link,即可看到urdf所描述的模型

(2)Xacro实现

1

编写Xacro文件

cd ~/桌面/jixiebi_ws/src/jixiebi/urdf
gedit one.xacro

复制代码

<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">

    <!--属性声明-->
    <xacro:property name="length" value="0.5" />
    <xacro:property name="width" value="0.2" />
    <xacro:property name="hight" value="0.1" />
    
    <!--宏定义-->
    <xacro:macro name="macro_name" params="macro_param">
    	<link name="${macro_param}">
        	<visual>
         		<geometry>
      	        	<!--属性调用-->
         	    	<box size="${length} ${width} ${hight}" />
       	   		</geometry>
        	</visual>
    	</link>
    </xacro:macro>
    
    <!--宏调用-->
    <xacro:macro_name macro_param="base_link" />
</robot>

2

编写launch文件

cd ~/桌面/jixiebi_ws/src/jixiebi/launch
gedit one.launch

复制代码

<launch>

    <param name="robot_description" textfile="$(find jixiebi)/urdf/one.urdf" />
    <node pkg="rviz" type="rviz" name="rviz" args="-d $(find jixiebi)/config/rviz/first.rviz" /> 

</launch>

3

重新编译工作空间

cd ~/桌面/jixiebi_ws
catkin_make
source devel/setup.bash

4

转化.xacro文件为.urdf文件,这时会发现urdf文件夹下多了one.urdf,同时one.xacro依然存在

我们需要运行urdf,正如开始所说,Xacro只是便于我们编写代码

cd ~/桌面/jixiebi_ws/src/jixiebi/urdf
rosrun xacro xacro one.xacro > one.urdf

打开one.urdf,发现如下

 

5

运行

cd ~/桌面/jixiebi_ws
source devel/setup.bash
roslaunch jixiebi one.launch

结果如下

  • 18
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值