【Rviz可视化系列】——URDF模型及在rviz中的可视化

目录

一、URDF介绍

URDF是统一机器人描述格式(United Robotics Description Format),是一个XML语法框架下用来描述机器人的语言格式。

1.1 URDF的语法类型

URDF的标签在XML文件中总共有9种,如下图所示:

其中重要的有两个标签,分别是linkjoint

  • link:用来描述机器人的连杆物理性质,内部包含连杆的质量、惯量、颜色等属性;
  • joint:用来描述机器人的关节执行机构,如旋转电机、直线电机等,内部包含关节种类、颜色等属性。

其它的标签介绍如下:

  • robot:URDF格式的根节点,标签内部使用name属性设置名称;
  • sensor/proposal:一个提议的标签,还未加进去;
  • transmission:用于描述关节与驱动器之间的关系,是PR2机器人模型独有的元素;
  • gazebo:是URDF模型在gazebo软件中仿真时提供的接口;
  • sensor:用于描述传感器,但是ROS的wiki上提到,该标签从未被实际使用过,已经被放弃了;
  • model_state:用于描述模型当前状态,正在进行开发,尚未实际使用;
  • model:用于描述模型运动学参数和动态参数,包含了linkjoint两个元素。

1.2 URDF的缺陷

URDF是ROS开发团队推出的一种机器人模型描述文件,本来用作RVIZ中显示和Gazebo中仿真,在时代的发展过程中,URDF逐渐暴露了很多缺点:

  • 模型冗长,重复内容过多
  • 参数硬编码,修改麻烦,不便于二次开发
  • 没有变量和参数计算的功能
  • URDF语法大量使用XML属性破坏了正确的格式设置,没有向后兼容的机制
  • 只支持树状结构机器人,不支持闭环机器人,如平行关节的机器人
  • 在仿真时,只能描述机器人模型,不能描述仿真场景的其它元素,如灯光,高度图等
  • URDF只能单独指定单个机器人的运动学和动力学特性,无法描述多个机器人。
  • URDF无法指定世界中机器人本身的姿势。
  • URDF不能指定摩擦和其他物理特性。

ROS团队开发URDF格式的初衷是提供能在RVIZ中显示和Gazebo中进行仿真,但由于以上缺点,URDF格式在Gazebo仿真场景中受到的限制极大

1.3 URDF的改进

针对URDF的改进分为两条路线,分别是Gazebo开发团队推出的SDF格式、ROS开发团队推出的XACRO格式。

SDF格式解决了URDF仿真困难问题,XACRO格式则解决了URDF的代码冗余问题。

1.3.1 SDF格式

以下介绍Gazebo发展的历史背景:

Gazebo最早是在2002年,由南加州大学的Andrew Howard和他的学生NateKoenig开发的。在接下来的几年中Nate在完成他的PhD学位的同时开发着Gazebo。 在2009年,Willow公司的一个高级研究工程师JohnHsu,把ROS和PR2与Gazebo整合在一起。自此Gazebo就成为了ROS社区中的一个基本工具。 在2011年的春天,Willow Garage公司开始为Gazebo的开发提供商业支持。在2012年,开源机器人联盟(Open Source Robotics Foundation, OSRF)从Willow Garage公司脱离出来,同时接管了Gazebo项目。

Gazebo的CEO提到,使用URDF的唯一原因是它在ROS中一直被使用!

"The only reason to use URDF is because it has been historically used within ROS." 
-----Nate Koenig
Adminidtrator of Gazebos

Gazebo研发团队于2012年从ROS研发团队脱离后,为了能够更好的对机器人进行仿真,于是舍弃了URDF格式,而是推出了SDF格式进行仿真。

1.3.2 XACRO格式

ROS开发团队则继续在URDF的基础上进行了修修补补,推出了XACRO格式。

针对URDF的缺点,XACRO借鉴了函数的思想,在精简模型代码方面提供了创建宏定义和文件包含,同时也提供了可编程接口,例如引入了常量,变量,数字计算,条件语句等功能。这些特性降低了模型的开发难度。

RVIZ中推荐使用XACRO格式可视化机器人模型,但也支持URDF和SDF格式的文件。

1.4 URDF、XACRO、SDF三种文件的转换

URDF、XACRO、SDF这三种文件相互转换的可行性见下表:

1.4.1 URDF生成XACRO

XACRO是URDF的升级版,一般都是使用XACRO生成URDF,而不是根据URDF生成XACRO。

1.4.2 URDF生成SDF

Gazebo官方提供一种命令行方法,实现URDF转SDF,在URDF所在目录下打开终端,执行如下命令:

gz sdf -p my_model.urdf > my_model.sdf

其中my_model.urdf是原URDF的名称,my_model.sdf为生成的SDF名称。

注意:如果是要在gazebo中进行机器人仿真,建议直接写SDF格式,而不是先写URDF再生成SDF,因为这样无法利用SDF中的很多特性!

1.4.3 XACRO生成URDF

ROS官方提供一种命令行方法,实现XACRO转URDF,在URDF所在目录下打开终端,执行如下命令:

rosrun xacro xacro.py mbot.xacro > mbot.urdf

其中mbot.xacro是原XACRO的名称,mbot.urdf为生成的URDF名称。

1.4.4 XACRO生成SDF

第一种:利用URDF作为中间结果进行转换,即XACRO->URDF->SDF。

第二种:利用大佬提供的工具

https://github.com/gezp/xacro4sdf
https://github.com/gezp/xmacro

具体参考大佬博客:https://www.guyuehome.com/18744/feed

1.4.5 SDF生成URDF

官方没有提供SDF生成URDF的工具,但好在有大佬自己开发了可行的工具——pysdf功能包。

项目的github地址:https://github.com/andreasBihlmaier/pysdf

1.4.6 SDF生成XACRO

SDF无法生成XACRO文件!

1.5 URDF配套工具

1.5.1 在RVIZ中可视化URDF模型

ROS提供一个urdf_tutorial包,可以在RVIZ中查看URDF模型。

roslaunch urdf_tutorial display.launch model:=01-myfirst.urdf

display.launch内容如下:

<launch>

  <arg name="model" default="$(find urdf_tutorial)/urdf/01-myfirst.urdf"/>
  <arg name="gui" default="true" />
  <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />

  <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />
  <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="robot_state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />

</launch>

它主要做了三件事:

  • 1.把urdf文件中描述的模型导入参数服务器;
  • 2.运行joint_state_publisher和robot_state_publisher节点,并发布sensor_msgs/JointSate话题;
  • 3.运行一个有配置文件的Rviz。

1.5.2 可视化URDF结构关系

ROS提供了命令行工具可以让URDF图像化显示出来:

urdf_to_graphiz my_robot.urdf

该命令会根据URDF文件生成机器人模型结构的PDF文件,打开该文件即可看到图形化的URDF:

1.5.3 检查URDF文件的合法性

ROS提供了相应的工具可以检查URDF文件是否存在语法错误:

check_urdf my_robot.urdf

如果一切正常,将会有如下显示:

robot name is: test_robot

---------- Successfully Parsed XML ---------------

root Link: link1 has 2 child(ren)

    child(1):  link2

    child(2):  link3

        child(1):  link4

二、URDF描述机器人

URDF主要通过linkjoint两个标签描述机器人。

下图展示了一个由linkjoint组成的机器人模型。

对于上述机器人模型,其URDF文件大致如下:

<robot name="pr2">
  <link> ... </link>
  <link> ... </link>
  <link> ... </link>

  <joint>  ....  </joint>
  <joint>  ....  </joint>
  <joint>  ....  </joint>
</robot>

2.1 URDF的拓扑结构

URDF存在着一定的拓扑结构限制,即URDF不能定义一个闭环的连杆模型,对于URDF用法就是:

  • 一个robot模型只能有一个root link,其没有parent
  • joint通过父子关系将两侧的link连接起来,各个link通过joint进行连接
  • link作为child时,只能找一个joint作为parent,不能同时有个parent

如下图所示,右侧的模型是不能使用URDF文件进行描述的

左侧的模型对应的URDF文件如下

<robot name = "linkage">
    <link name="linkA">
        <...>
    <link name="linkB">
        <...>
    <link name="linkC">
        <...>
    <link name="linkD">
        <...>
    <joint name = "joint A ... >
        <parent link = "link A" />
        <child link = "link B" />
    </joint>
    <joint name = "joint B ... >
        <parent link = "link A" />
        <child link = "link C" />
    </joint>
    <joint name = "joint C ... >
        <parent link = "link C" />
        <child link = "link D" />
    </joint>
</robot>

一个较为复杂的四足机器人模型的URDF文件可视化效果如下图:

2.2 link元素

link元素通过子标签标签属性来描述link的各项参数。


  • link元素之子标签

link的子标签分为三大类,分别是inertialvisualcollision,分别代表link物理性质标签外观视觉标签碰撞检测标签,如下图所示:

其中visual标签中的geometrymaterial标签又可进行细分,具体每个标签的含义将在后续介绍。


  • link元素之标签属性

在URDF文件中,机器人模型的各项参数是通过相应标签的属性进行设置,link元素所有子标签的属性如下图所示:

图中绿色字体为子标签黄色字体为标签属性黑色字体为属性的值均为字符串类型!

由于URDF主要在RVIZ中使用,RVIZ并不是仿真,只是视觉效果展示,不具备仿真特性,因此机器人模型URDF文件的外观视觉标签最为重要(红★),物理性质和碰撞检测标签是可选标签,不是必须具备的,因此可忽略不填写,但为了文章的完整性,后续仍然介绍全部标签内容。

2.2.1 inertial

inertial标签主要包含三个子标签originmassinertia,分别代表了link的物理坐标原点、质量和转动惯量,其中单位都是国际标准单位制。

2.2.2 visual

visual标签主要包含三个子标签origingeometrymaterial,分别代表了link的视觉坐标原点、几何形状和材料外观颜色,其中视觉坐标原点的单位是米。

visual标签最为重要的便是geometrymaterial子标签。

2.2.2.1 geometry子标签

geometry标签用来描述link的几何外观形状,URDF允许内置四种标签用来描述link的形状,这四种标签又可分为两大类基本几何形状几何形状文件

基本几何形状只有三种,分别是box(长方体)、cylinder(圆柱体)和sphere(球体)

其中box标签通过设置长方体的长、宽和高参数进行描述;cylinder标签通过设置圆柱高和底面圆半径进行描述;sphere标签通过设置球的半径进行描述。

        <geometry>
                <box size="1.0 2.0 3.0"/>
                <cylinder length="1.0" radius="1.0"/>
                <sphere radius="1.0"/>
        </geometry>

几何形状文件用来指定机器人模型的几何形状文件的路径,URDF文件通过直接导入机器人模型的结构文件,如.dea.stl文件,让RVIZ在渲染过程中,直接根据几何形状文件进行渲染

mesh标签通过filename属性指定几何形状文件的路径,通过scale属性指定几何形状是否有缩放,默认无缩放。

        <geometry>
                <mesh filename="package://robot_description/meshes/base_link.dea" scale="1.0"/>
        </geometry>

其中filename后面可以是绝对路径,也可以是相对路径。URDF支持根据ROS的package路径寻找网格文件,即package://package_name/xxx.dea,若提示找不到package,可能是在终端中没有source该包所在工作空间下的环境变量。

注意:geometry标签下的四个子标签不能同时存在,只能四选一,因为一个link的外形不可能既是box又是cylinder!(上述属性介绍图片中同时出现meshbox只是为了展示geometry标签具备多种属性。)

提示:三种基本几何标签搭建一个复杂的机器人模型基本不可能,如URDF无法用这三种基本形状描述一个凹面体的机器人,URDF通常是通过导入机器人模型的结构文件,如.dea.stl文件解决此问题,。

2.2.2.2 material子标签

material标签用来描述link的外观颜色,URDF允许内置两种标签用来描述link的外观颜色,分别是texturecolor

rviz通过mesh标签指定的文件加载URDF中机器人模型时,并不会使用该文件中所设置机器人的外观颜色参数,而是另外从material中读取机器人模型的外观颜色参数进行渲染!

color子标签通过设置RGB色彩空间的归一化参数透明度参数直接渲染link颜色,其中materialname属性为可选,不是必须的。使用color子标签的缺点是无法单独为某一个link设置不同颜色。

        <material name="my_name">
                <color rgba="1 1 1 1"/>                 
        </material>

texture子标签通过filename属性指定描述link外观颜色的文件路径,通过该方式,可以单独在一个link上渲染不同的颜色。

        <material name="my_name">
                <texture filename="package://robot_description/textures/base_link.obj"/>
        </material>

其中filename后面可以是绝对路径,也可以是相对路径。URDF支持根据ROS的package路径寻找外观颜色文件,即package://package_name/xxx.obj,若提示找不到package,可能是在终端中没有source该包所在工作空间下的环境变量。

注意:material标签下的两个子标签不能同时存在,只能二选一,因为一个link的外观颜色不可能既由color又由texture设置!(上述属性介绍图片中同时出现texturecolor只是为了展示material标签具备多种属性。)

2.2.3 collision

collision标签主要包含两个子标签origingeometry,分别代表了link碰撞检测的坐标原点和碰撞检测外形,其中单位都是国际标准单位制。

RVIZ中只会对机器人模型的外形进行渲染,并不会进行物体的碰撞检测,该标签主要为了仿真使用。

2.3 joint元素

joint元素只有一级子标签,没有嵌套标签,其中可以设置的子标签和属性见下表:

表中绿色字体代表标签名称黄色字体代表标签属性红色可选代表该标签不是必须存在的。由于仅在RVIZ中使用机器人模型进行外观渲染,因此joint元素的部分仿真标签可以忽略不进行设置,其它比较重要的标签已经在前面用★进行标注

joint标签的type属性可设置为以下选项:

  • continuous:旋转关节,可以绕单轴无限旋转
  • revolute:旋转关节,类似于 continues,但是有旋转角度限制,通过设置limit标签进行限制
  • prismatic:滑动关节,沿某一轴线移动的关节,有位置极限,通过设置limit标签进行限制
  • planer:平面关节,允许在平面正交方向上平移或旋转
  • floating:浮动关节,允许进行平移、旋转运动
  • fixed:固定关节,不允许运动的特殊关节

其中重要标签的含义如下

  • origin标签的xyzrpy属性指定joint的坐标系;
  • parent标签的link属性指定joint的父link名称;
  • child标签的link属性指定joint的子link名称;
  • axis标签的xyz属性指定joint的旋转(平移)轴

joint中的所有子标签和属性的含义见下表:

三、RVIZ可视化URDF模型

3.1 RVIZ加载URDF模型的原理

RVIZ根据ROS的消息类型可视化图形,而可视化的消息必须是RVIZ支持的DisplayType,RVIZ原生支持的DisplayType共有23种,如下表所示:

RVIZ原生支持的DisplayType包含RobotModel类型,可以通过该DisplayType对机器人模型进行可视化,如下图所示。

RVIZ的RobotModel类型的DisplayType,并不是通过订阅机器人模型的消息类型对其可视化,而是通过读取机器人模型的URDF文件直接可视化显示。

该DisplayType的介绍如下,可以看到RVIZ是通过调用searchParam()函数从参数树中搜索指定的ROS参数名称robot_descrtption,根据URDF文件路径找到URDF文件,然后通过paramtextfile选项(不是value选型)加载机器人模型URDF结构到RVIZ中进行显示,其中可以调整机器人模型相关参数,如Visual EnabledCollision EnabledUpdate RateAlphaTF Prefix

在RVIZ中还可以单独为机器人模型的每个link设置可视化效果,如显示每个link的运动轨迹,或者显示link的旋转轴!

显示link的运动轨迹与显示link的旋转轴示意图如下:

link运动轨迹与关节轴

在RVIZ中添加RobotModel这种Displaytype,以及该DisplayType可供修改的参数如下图所示:

3.2 RVIZ加载URDF模型的方法

在launch文件中通过param参数加载机器人模型urdf文件。

<launch>
        <node name="rviz" pkg="rviz" type="rviz"  />
        <param name="robot_description" textfile="$(find r2d2)/robot1.urdf" />

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

上述launch文件中,必须运行robot_state_publisher节点,否则其它link因为没有TF信息无法正常显示!注意:有些launch文件中使用的是state_publisher,这可能会导致无法正常加载机器人模型!!!

必须在RVIZ中选择合适的固定参考系,即Fixed Frame不一定是map,也可能是机器人模型的某个link坐标系,效果如下:

RobotModel这个DisplayType使用的是ROS paramtextfile而不是value选项,textfile选项是读取本地文件的内容并存储为字符串

<launch>
        <node name="rviz" pkg="rviz" type="rviz"  />
        <param name="robot_description" textfile="$(find r2d2)/robot1.urdf" />
</launch>

使用 rosparam get /robot_description命令后,终端输出如下:

注意:urdf文件中也可以不写XML的版本信息,直接从robot根节点开始,如下:

<robot name="pr2">
  .......
</robot>

ROS还提供了另一种方式加载URDF模型文件,但不推荐使用:

<launch>
        <node name="rviz" pkg="rviz" type="rviz"  />
        <param name="robot_description" command="cat $(find r2d2)/model.urdf" />
</launch>

3.3 URDF模型的文件组织结构

机器人模型的相关文件,如urdf文件、mesh文件、material文件等统一以ROS的package形式进行组织,如下所示:

package的名称通常为robot_descriptionurdf/文件夹存放机器人的urdf文件,mesh/文件夹存放机器人的结构网络文件,material/文件夹存放机器人的外观颜色文件。

CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.0.2)
project(robot_description)
find_package(catkin REQUIRED)

catkin_package()

package.xml文件内容如下:

<?xml version="1.0"?>
<package format="2">
  <name>robot_description</name>
  <version>0.0.0</version>
  <description>The robot_description package</description>

  <maintainer email="wanghuohuo@todo.todo">wanghuohuo</maintainer>
  <license>TODO</license>

  <buildtool_depend>catkin</buildtool_depend>

</package>

技巧:若想要在robot_description这个包中放置多个机器人模型,可以继续在urdf/文件夹下新建文件夹,如urdf/robot1/mesh/material/文件夹也是类似。

3.4 使机器人模型运动

rviz是订阅TF进行运动,而不是topic!

机器人在RVIZ中运动起来需要四个步骤

  • 1.URDF的关节必须设置支持运动,即joint标签的type属性不能是fixed类型;
  • 2.需要发布各个joint的话题消息,如速度、位置等;
  • 3.根据各个joint的运动信息进行正向运动学推导,计算机器人各个link的位姿,发布TF信息;
  • 4.RVIZ根据接收到各个link的TF信息实时渲染link的位置。

注:若不需要展示关节运动信息(如车轮动起来,机械臂动起来),可以在计算机器人位姿的节点中直接发布base_link(URDF文件中的root link)的tf信息。

3.4.1 URDF的joint设置

要让机器人运动起来,需要给运动的joint设置为除fix以外的合适type,否则无法运动。

joint标签的type属性可设置为以下选项:

  • continuous:旋转关节,可以绕单轴无限旋转
  • revolute:旋转关节,类似于 continues,但是有旋转角度限制,通过设置limit标签进行限制
  • prismatic:滑动关节,沿某一轴线移动的关节,有位置极限,通过设置limit标签进行限制
  • planer:平面关节,允许在平面正交方向上平移或旋转
  • floating:浮动关节,允许进行平移、旋转运动

joint标签的name是统一的,其它节点在发布joint_state关节运行状态的话题消息时,就是通过URDF文件中joint的名称指定相应的joint

<joint name="base_to_arm_base" type="continuous">
        <origin xyz="0 0 0"/>
        <parent link="base_link"/>
        <child link="arm_base"/>
        <axis xyz="0 0 1"/>
</joint>

3.4.2 joint_state_publisher

joint_state_publisher是一个ROS内置的功能包,提供joint_state_publisher节点。

该程序包从参数服务器默认读取robot_description参数,找到所有非固定关节并发布一个定义了所有这些关节的消息,话题名称为joint_states,消息类型是sensor_msgs/JointState

该包发布的关节状态的值有四种可能的来源:

  • (1) 通过GUI 直接输入的值

joint_state_publisher包可以通过设置use_gui参数打开一个GUI界面,该界面会自动生成每个非固定关节的控制条,每个滑块都设置为关节的最小和最大限制continus关节除外,范围从 -Pi 到 +Pi。通过滑动该滑块,joint_state_publisher读取控制条的值并发布joint_states话题,频率默认为10Hz。

joint_state_publisher_gui

ROS为了方便调试,单独将这个GUI包剥离出来,形成了joint_state_publisher_gui包。

<launch>
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
</launch>

注意joint_state_publisher_guijoint_state_publisher不能同时使用,否则会发生冲突,如下图所示:

而使用joint_state_publisheruse_gui参数进行调试就不会冲突,因为这个GUI内置其中,如下图所示:

★ 推荐使用joint_state_publisher_gui包进行调试!

注:ROS的官方Wiki提到joint_state_publisher_gui包已经被剥离出来了,但此GUI界面功能仍然存在joint_state_publisher中,即use_gui参数,并且现在(2022.12)仍然可以使用。

  • (2) 订阅其它节点的关节状态话题

通过设置source_list参数,其数据类型为字符串列表,默认值:[],joint_state_publisher节点会订阅source_list参数列表内的话题名称,这些话题的消息类型必须是sensor_msgs/JointState类型。

  • (3) 另一个joint的值

joint_state_publisher支持多个关节相互关联。

如果两个轮子有两个独立的关节,但希望它们以相同的速度转动,则可以将其中一个的旋转限制为与另一个相同。或者,如果有两个大小不等的滑轮,并且想让一个滑轮驱动另一个,可以限制第二个滑轮的转动速度是另一个的 3 倍。

通过设置dependent_joints参数,其数据类型为map类型(键-值对;key-value,支持一对多映射),并且其中的每个元素也必须为map类型,即Map of maps,默认值:无,joint_state_publisher节点会订阅source_list参数列表内的话题名称,这些话题的消息类型必须是sensor_msgs/JointState类型。

其中的键是受约束关节的名称,值是父关节名称,以及可选的一个因子,将父关节的值乘以得到受约束的关节值。

dependent_joints:
  joint_D: {parent: joint_A, factor: 3 }
  joint_E: {parent: joint_B }
  joint_F: {parent: joint_C, factor: -1 }
  • (4) 默认值

默认值为零。如果零不是允许值,则使用(max+min)/2,要覆盖某些关节的默认值,请使用zeros参数:

zeros:
  joint_A: 1.57
  joint_B: 0.785

注意:joint_state_publisherjoint_state_publisher_gui节点都是默认从参数服务器读取robot_description参数的机器人URDF文件内容生成非固定关节的控制条,如果没有该参数(也没有设置内部参数robot_description)会报错退出,如果更改为自己的机器人模型的名称,需要重映射joint_state_publisher节点的内部参数robot_description,该参数的类型为textfile,值为机器人URDF文件的内容!(joint_state_publisher_gui没有wiki文档,猜测也可以有该内置参数可以设置)

joint_state_publisher种映射参数robot_description名称!

<launch>
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui">
            <remap from="robot_description" to="my_robot_description" />
    </node>
</launch>

3.4.3 robot_state_pubilsher

robot_state_pubilsher是一个ROS内置的功能包,提供robot_state_pubilsher节点。

该包的功能是根据机器人关节角度使用机器人的运动树模型进行正运动学推导计算所有link的3D姿态,再将其转换为tf坐标信息,最后进行广播

该节点订阅机器人的关节角度话题名称为joint_states,消息类型是sensor_msgs/JointState,默认发布频率为50Hz。

robot_state_publisher 使用默认参数robot_description指定的URDF和话题名称为joint_states中的关节位置(不考虑关节速度和力矩)来计算机器人的正向运动学并通过tf发布结果。

注意:所有Fix frame转换的时间戳都+0.5 秒。

如果想计算自己的机器人姿态,可以通过重映射参数robot_description名称和重映射话题名称!

<launch>
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" >
        <remap from="robot_description" to="my_robot_description" />
        <remap from="joint_states" to="my_topic_name"/>
    </node>
</launch>

参考:

URDF的官方概述:http://wiki.ros.org/urdf
URDF的官方教程:http://wiki.ros.org/urdf/Tutorials
URDF的XML格式所包含的元素http://wiki.ros.org/urdf/XML
URDF文件的语法详解博客https://blog.csdn.net/lc1852109/article/details/125916104
RVIZ加载机器人模型DisplayType官方文档http://wiki.ros.org/rviz/DisplayTypes/RobotModel
roslaunch使用param的textfile选型http://wiki.ros.org/roslaunch/XML/param
joint_state_publisher的官方文档http://wiki.ros.org/joint_state_publisher
robot_state_publisher的官方文档http://wiki.ros.org/robot_state_publisher

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,864评论 6 494
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,175评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,401评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,170评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,276评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,364评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,401评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,179评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,604评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,902评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,070评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,751评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,380评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,077评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,312评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,924评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,957评论 2 351

推荐阅读更多精彩内容