目录
一、URDF介绍
URDF是统一机器人描述格式(United Robotics Description Format),是一个XML语法框架下用来描述机器人的语言格式。
1.1 URDF的语法类型
URDF的标签在XML文件中总共有9种,如下图所示:
其中重要的有两个标签,分别是link
和joint
:
link
:用来描述机器人的连杆物理性质,内部包含连杆的质量、惯量、颜色等属性;joint
:用来描述机器人的关节执行机构,如旋转电机、直线电机等,内部包含关节种类、颜色等属性。
其它的标签介绍如下:
robot
:URDF格式的根节点,标签内部使用name
属性设置名称;-
sensor/proposal
:一个提议的标签,还未加进去; -
transmission
:用于描述关节与驱动器之间的关系,是PR2
机器人模型独有的元素; -
gazebo
:是URDF模型在gazebo软件中仿真时提供的接口; -
sensor
:用于描述传感器,但是ROS的wiki上提到,该标签从未被实际使用过,已经被放弃了; -
model_state
:用于描述模型当前状态,正在进行开发,尚未实际使用; model
:用于描述模型运动学参数和动态参数,包含了link
和joint
两个元素。
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主要通过link
和joint
两个标签描述机器人。
下图展示了一个由link
和joint
组成的机器人模型。
对于上述机器人模型,其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
的子标签分为三大类,分别是inertial
、visual
和collision
,分别代表link
的物理性质标签、外观视觉标签、碰撞检测标签,如下图所示:
其中visual
标签中的geometry
和material
标签又可进行细分,具体每个标签的含义将在后续介绍。
- link元素之标签属性
在URDF文件中,机器人模型的各项参数是通过相应标签的属性进行设置,link
元素所有子标签的属性如下图所示:
图中绿色字体为子标签,黄色字体为标签属性,黑色字体为属性的值,值均为字符串类型!
由于URDF主要在RVIZ中使用,RVIZ并不是仿真,只是视觉效果展示,不具备仿真特性,因此机器人模型URDF文件的外观视觉标签最为重要(红★),物理性质和碰撞检测标签是可选标签,不是必须具备的,因此可忽略不填写,但为了文章的完整性,后续仍然介绍全部标签内容。
2.2.1 inertial
inertial
标签主要包含三个子标签origin
、mass
和inertia
,分别代表了link
的物理坐标原点、质量和转动惯量,其中单位都是国际标准单位制。
2.2.2 visual
visual
标签主要包含三个子标签origin
、geometry
和material
,分别代表了link
的视觉坐标原点、几何形状和材料外观颜色,其中视觉坐标原点的单位是米。
visual
标签最为重要的便是geometry
和material
子标签。
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
!(上述属性介绍图片中同时出现mesh
和box
只是为了展示geometry
标签具备多种属性。)
提示:三种基本几何标签搭建一个复杂的机器人模型基本不可能,如URDF无法用这三种基本形状描述一个凹面体的机器人,URDF通常是通过导入机器人模型的结构文件,如.dea
或.stl
文件解决此问题,。
2.2.2.2 material
子标签
material
标签用来描述link
的外观颜色,URDF允许内置两种标签用来描述link
的外观颜色,分别是texture和color。
rviz
通过mesh
标签指定的文件加载URDF中机器人模型时,并不会使用该文件中所设置机器人的外观颜色参数,而是另外从material
中读取机器人模型的外观颜色参数进行渲染!
color
子标签通过设置RGB色彩空间的归一化参数和透明度参数直接渲染link
颜色,其中material
的name
属性为可选,不是必须的。使用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
设置!(上述属性介绍图片中同时出现texture
和color
只是为了展示material
标签具备多种属性。)
2.2.3 collision
collision
标签主要包含两个子标签origin
和geometry
,分别代表了link
碰撞检测的坐标原点和碰撞检测外形,其中单位都是国际标准单位制。
RVIZ中只会对机器人模型的外形进行渲染,并不会进行物体的碰撞检测,该标签主要为了仿真使用。
2.3 joint元素
joint
元素只有一级子标签,没有嵌套标签,其中可以设置的子标签和属性见下表:
表中绿色字体代表标签名称,黄色字体代表标签属性,红色可选代表该标签不是必须存在的。由于仅在RVIZ中使用机器人模型进行外观渲染,因此joint
元素的部分仿真标签可以忽略不进行设置,其它比较重要的标签已经在前面用★进行标注!
joint
标签的type
属性可设置为以下选项:
- continuous:旋转关节,可以绕单轴无限旋转
- revolute:旋转关节,类似于 continues,但是有旋转角度限制,通过设置limit标签进行限制
- prismatic:滑动关节,沿某一轴线移动的关节,有位置极限,通过设置limit标签进行限制
- planer:平面关节,允许在平面正交方向上平移或旋转
- floating:浮动关节,允许进行平移、旋转运动
- fixed:固定关节,不允许运动的特殊关节
其中重要标签的含义如下
-
origin
标签的xyz
和rpy
属性指定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文件,然后通过param
的textfile
选项(不是value选型)加载机器人模型URDF结构到RVIZ中进行显示,其中可以调整机器人模型相关参数,如Visual Enabled
、Collision Enabled
、Update Rate
、Alpha
、TF Prefix
。
在RVIZ中还可以单独为机器人模型的每个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 param
的textfile
而不是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_description
,urdf/
文件夹存放机器人的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。
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_gui
和joint_state_publisher
的不能同时使用,否则会发生冲突,如下图所示:
而使用joint_state_publisher
的use_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_publisher
和joint_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