当前位置: 首页 > news >正文

ROS回顾学习(4): URDF的学习以及与Xacro的比较--机器人模型描述

1.urdf与Xacro简单比较

"URDF" 是最初也是比较简单的机器人描述文件,它的结构简单明了,容易理解。
    但是这也导致当机器人模型变得复杂时,urdf的结构描述就变得冗长,无法简洁有效的描述机器人部件;
"Xacro" 的出现在一定程度上有效地解决这种问题。在本质上,Xacro与URDF是等价的,
    但Xacro格式提供了一些更高级的方式来组织和编辑机器人描述。

2.urdf文件结构与Xacro文件结构

URDF--主要部件

示例如下:定义个robot name, 将其他的部件都放在里面,然后针对每一个关键(joint ), 坐标外观(geometry), 材料(material)分别进行描述。 其中,每个child link是以parent link 为原点的三维坐标系位置(Origin), 若没有parent link的origin则是相对于本身原位置的转换。

<?xml version="<?xml version="1.0"?>
<robot name="test_robot">
      <link name="base_link" />
      <link name="link2" />
      <link name="link3" />
      <link name="link4" />

    <link name="base_link">
        <visual>
        <geometry>
          <box size="0.25 .16 .05"/>
        </geometry>
        <origin rpy="0 0 0" xyz="0 0 0"/>
        <material name="blue">
          <color rgba="0 0 .8 1"/>
        </material>
         </visual>
      </link>

     <joint name="joint1" type="continuous">
        <parent link="base_link"/>
        <child link="link2"/>
        <origin xyz="0.3 0 0" rpy="1 0 0" />
      </joint>

     <joint name="joint2" type="continuous">
        <parent link="base_link"/>
        <child link="link3"/>
        <origin xyz="0 0.3 0" rpy="0 1 0" />
      </joint>

     <joint name="joint3" type="continuous">
        <parent link="base_link"/>
        <child link="link4"/>
        <origin xyz="0 0 0.3" rpy="0 0 1" />
      </joint>
</robot>

其他部件标签如: "Collision", "Axis joint", "Limit"暂略.

Xacro--主要部件

  • 定义宏属性: Constants

    <xacro:property name="WIDTH" value="2.0"/>
    <xacro:property name="PI" value="3.14159265" />
    使用:${PI/2}
    
  • Macros: 小模块的定义,方便重用,以及可以使用参数来标识不同的部分

    <xacro:macro name="default_link" params="prefix *origin">               
        <link name="${prefix}_link1" > 
            <xacro:insert_block name="prigin" /> 
        </link> 
    </xacro:macro>
    
    <xacro:default_link prefix="my"> 
        <origin xyz="0 0 0" rpy="0 0 0" /> 
    </xacro:default_link>
    
  • include:很多模型已经定义好分成多个文件,我们可以用include格式将各个部件加进来,并且还可以加入urdf文件。

    <xacro:include firename="${find packages}/urdf/***.xarco" />
    <xacro:include firename="${find packages}/urdf/***.urdf" />
    

3.两种不同机器人描述文件的显示方式

URDF

<launch>
    <arg name="model" />
    <arg name="gui" default="false" />
    <param name="robot_description" textfile="$(find basic_3d_visualizer)/urdf/First01learn.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 basic_3d_visualizer)/urdf/urdf_test.rviz" />
</launch>

Xacro

<launch>
    <arg name="model" />
    <arg name="gui" default="true" />
    <param name="robot_description" command="$(find xacro)/xacro --inorder $(find basic_3d_visualizer)/urdf/First01learn.urdf" />
    <param name="use_gui" value="$(arg gui)"/>
    <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find urdf_tutorial)/urdf.rviz" />
</launch>

[参考链接]

1. URDF与Xacro的语法比较

2. Xacro文件详述

3. URDF 结构详解

4. URDF初级

5. URDF 链接标签详解

6. 创客智造的一个完整机器人的分步阐述URDF

相关文章:

  • 论文算法学习记录(2)---3D地图中的动态障碍物检测和实时去除
  • ROS回顾学习(5): 订阅多个话题并对其进行同步处理
  • 论文算法学习记录(3)---semantic-stixel-world:柱间像素的学习
  • 原创性版权声明
  • MarkDown编辑器语法记录
  • ROS回顾学习(6): launch文件参数集锦及优化
  • 论文算法学习记录(4):视锥体-- Frustum Culling
  • RobotSlamApplication(1):第一个三方库--Eigen3库的使用
  • 论文算法学习实现(5):动态障碍物的检测和剔除2
  • ubuntu学习技巧2:Terminal命令学习
  • RobotSlamApplication(2): 视觉SLAM中常用的一些第三方库简介
  • C++11回顾学习(1): 语法简要回顾和通俗解释
  • 菜鸟专学:从头到尾创建自己的SLAM系统
  • 菜鸟专学:Eigen--Sophus--CV--三种不同库对矩阵的操作方式
  • ROS回顾学习(7):ubuntu下设置(ROS)程序开机自启动
  • 【Leetcode】104. 二叉树的最大深度
  • Angular 响应式表单之下拉框
  • JavaScript函数式编程(一)
  • spring boot下thymeleaf全局静态变量配置
  • 测试如何在敏捷团队中工作?
  • 力扣(LeetCode)21
  • 浅谈web中前端模板引擎的使用
  • 译有关态射的一切
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • #pragma预处理命令
  • (12)Linux 常见的三种进程状态
  • (3)nginx 配置(nginx.conf)
  • (function(){})()的分步解析
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (Matlab)使用竞争神经网络实现数据聚类
  • (poj1.2.1)1970(筛选法模拟)
  • (python)数据结构---字典
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (十六)Flask之蓝图
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • (转)原始图像数据和PDF中的图像数据
  • *上位机的定义
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • .NetCore项目nginx发布
  • .NET面试题(二)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • ::前边啥也没有
  • @Mapper作用
  • @Validated和@Valid校验参数区别
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [ACL2022] Text Smoothing: 一种在文本分类任务上的数据增强方法
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [ARM]ldr 和 adr 伪指令的区别
  • [bug总结]: Feign调用GET请求找不到请求体实体类
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [Bzoj4722]由乃(线段树好题)(倍增处理模数小快速幂)
  • [C++ 从入门到精通] 12.重载运算符、赋值运算符重载、析构函数
  • [C++]C++入门--引用