【仿真】0、xacro模型

0、xacro模型

xacro简介

精简化、可复用、模块化的描述形式——xacro,它具备以下几点突出的优势。
·精简模型代码:xacro是一个精简版本的URDF文件,在xacro文件中,可以通过创建宏定义的方式定义常量或者复用代码,不仅可以减少代码量,而且可以让模型代码更加模块化、更具可读性。
·提供可编程接口:xacro的语法支持一些可编程接口,如常量、变量、数学公式、条件语句等,可以让建模过程更加智能有效。

《ROS机器人开发实践》点击源码下载跳转

简单使用

1.将xacro文件转化为URDF文件
rosrun xacro xacro.py mrobot.urdf.xacro > mrobot.urdf
2.直接调用xacro文件解析器

<arg name="model" default="$(find xacro)/xacro --inorder '$(find mrobot_description)/urdf/mrobot.urdf.xacro'" /> 
<param name="robot_description" command="$(arg model)" />  

启动:
roslaunch mrobot_description display_mrobot.launch

加入一个摄像头
roslaunch mrobot_description display_mrobot_with_camera.launch
加入Kinect摄像头
roslaunch mrobot_description display_mrobot_with_kinect.launch
加入雷达
roslaunch mrobot_description display_mrobot_with_laser.launch

以雷达模型为例

<?xml version="1.0"?>
<robot name="mrobot" xmlns:xacro="http://www.ros.org/wiki/xacro">

	<xacro:include filename="$(find mrobot_description)/urdf/mrobot_body.urdf.xacro" />
	<xacro:include filename="$(find mrobot_description)/urdf/rplidar.xacro" />

	<xacro:property name="rplidar_offset_x" value="0" />
	<xacro:property name="rplidar_offset_y" value="0" />
	<xacro:property name="rplidar_offset_z" value="0.028" />

	<!-- MRobot机器人平台-->
	<xacro:mrobot_body/>

	<!-- rplidar -->
	<joint name="rplidar_joint" type="fixed">
		<origin xyz="${rplidar_offset_x} ${rplidar_offset_y} ${rplidar_offset_z}" rpy="0 0 0" />
		<parent link="plate_2_link"/>
		<child link="laser_link"/>
	</joint>
	<xacro:rplidar prefix="laser"/>

</robot>

<?xml version="1.0"?>先是XML声明,它指定了文档使用的XML版本是1.0
xmlns:xacro="http://www.ros.org/wiki/xacro":这是一个命名空间声明。它允许你在XML文档中使用xacro:前缀来引用XACRO的特定元素或属性。
<xacro:include引入定义好的.xarco文件

<launch>
	<arg name="model" default="$(find xacro)/xacro --inorder '$(find mrobot_description)/urdf/mrobot_with_rplidar.urdf.xacro'" />
	<param name="robot_description" command="$(arg model)" />
	
	<arg name="gui" default="true" />
    <!-- 设置GUI参数,显示关节控制插件 -->
	<param name="use_gui" value="$(arg gui)"/>

    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
	<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />

	<!-- 运行robot_state_publisher节点,发布tf  -->
	<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />

    <!-- 运行rviz可视化界面 -->
	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mrobot_description)/config/mrobot.rviz" required="true" />

</launch>

launch文件中调用xacro文件解析器
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mrobot_description)/urdf/mrobot_with_rplidar.urdf.xacro'" />
arg标签通常用于在XML或YAML文件中定义参数,这些参数可以在后续的launch文件中使用。$(find xacro)/xacro --inorder:这部分命令是在调用 xacro 工具,xacro 是ROS中用于处理URDF(Unified Robot Description Format)文件的宏语言。$(find xacro) 会找到 xacro 软件包的路径,然后结合 /xacro 来指定 xacro 命令的完整路径。--inorder 参数确保 xacro 文件按照它们在命令行中出现的顺序进行解析。这个命令会找到名为 mrobot_description 的ROS软件包,并定位到其 /urdf 文件夹下的 /mrobot_with_rplidar.urdf.xacro 文件

  • 另外,需要注意的是新版本ros,例如noetic,xacro宏定义需要xacro:前缀
<xacro:macro name="mrobot_standoff_2in" params="parent number x_loc y_loc z_loc">
        <joint name="standoff_2in_${number}_joint" type="fixed">
            <origin xyz="${x_loc} ${y_loc} ${z_loc}" rpy="0 0 0" />
            <parent link="${parent}"/>
            <child link="standoff_2in_${number}_link" />
        </joint>

        <link name="standoff_2in_${number}_link">
            <inertial>
                <mass value="0.001" />
                <origin xyz="0 0 0" />
                <inertia ixx="0.0001" ixy="0.0" ixz="0.0"
                         iyy="0.0001" iyz="0.0"
                         izz="0.0001" />
            </inertial>

            <visual>
                <origin xyz=" 0 0 0 " rpy="0 0 0" />
                <geometry>
                    <box size="0.01 0.01 0.07" />
                </geometry>
                <material name="black">
                    <color rgba="0.16 0.17 0.15 0.9"/>
                </material>
            </visual>

            <collision>
                <origin xyz="0.0 0.0 0.0" rpy="0 0 0" />
                <geometry>
                    <box size="0.01 0.01 0.07" />
                </geometry>
            </collision>
        </link>
    </xacro:macro>


<xacro:mrobot_standoff_2in parent="standoff_2in_1_link" number="5" x_loc="0" y_loc="0" z_loc="${plate_height}"/>
<xacro:mrobot_standoff_2in parent="standoff_2in_2_link" number="6" x_loc="0" y_loc="0" z_loc="${plate_height}"/>
<xacro:mrobot_standoff_2in parent="standoff_2in_3_link" number="7" x_loc="0" y_loc="0" z_loc="${plate_height}"/>
<xacro:mrobot_standoff_2in parent="standoff_2in_4_link" number="8" x_loc="0" y_loc="0" z_loc="${plate_height}"/>
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值