[ROS] URDF 模型基础知识
文章目录
URDF: Unified Robot Description Format,统一机器人描述格式
1. ros 创建 urdf 建模空间,创建 urdf 工作单元
ROSWS/
下创建robot_ws/
工作空间:mkdir robot_ws
robot_ws/
下 创建src/
目录:mkdir src
robot_ws/src/
下创建demo_urdf
工作单元(pkg):catkin_create_pkg demo_urdf roscpp rospy rosmsg
,注意添加依赖robot_ws/
下编译工作空间:catkin_make
source devel/setup.bash
2. 为 rviz 设置 robot_description
参考 rough 章节
- 尝试获得
/robot_description
:rosparam get /robot_description
- 通过 xacro 查看目标路径下的
.urdf
文件:rosrun xacro xacro -i src/demo_urdf/urdf/helloworld.urdf
- 确定路径无误后设置
/robot_description
:rosparam set robot_description -t src/demo_urdf/urdf/helloworld.urdf
- 再次尝试获得
/robot_description
,如果设置成功,会输出结果:rosparam get /robot_description
设置成功后,rviz 显示模型
将 Fixed Frame 改写成 base_link,依据
helloworld.urdf
文件中的link_name
,得到目标模型。
3. 为 urdf + rviz 编写 launch file
<launch>
<param name="robot_description" command="$(find xacro)/xacro -i $(find demo_urdf)/urdf/helloworld.urdf"></param>
<node pkg="rviz" type="rviz" name="rviz"></node>
</launch>
4. urdf 创建盒子(box)
- geometry_box.urdf
<?xml version="1.0" encoding="utf-8" ?>
<robot name="box">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<box size="1 2 3"/>
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
</link>
</robot>
- 配置 launch file 的 rviz 启动项
- -d 表示指向的 rviz 目标配置文件路径
<launch>
<arg name="model" default="helloworld.urdf" />
<param name="robot_description" command="$(find xacro)/xacro -i $(find demo_urdf)/urdf/$(arg model)"></param>
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find demo_urdf)/rviz/demo01.rviz"></node>
</launch>
- rviz 显示模型
5. urdf 创建圆柱体(cylinder)
- geometry_cylinder.urdf
<?xml version="1.0" encoding="utf-8" ?>
<robot name="cylinder">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length="2" radius="0.2"/>
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
</link>
</robot>
- 启动:
roslaunch demo_urdf display.launch model:=geometry_cylinder.urdf
- rviz 显示模型
6. urdf 创建球体(sphere)
- geometry_sphere.urdf
<?xml version="1.0" encoding="utf-8" ?>
<robot name="sphere">
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
</link>
</robot>
- rviz 显示模型
7. urdf 显示 bowl.dae 模型
- 保存 bowl.dae 模型文件
- geometry_mesh.urdf
<?xml version="1.0" encoding="utf-8" ?>
<robot name="box"> < !-- 机器人整体模型名称 -- >
<link name="base_link"> < !-- 整体模型中连杆组件名称 -- >
<visual> < !-- 视觉属性名称 -- >
<origin xyz="0 0 0" rpy="0 0 0"/> < !-- 此组件原点 -- >
<geometry> < !-- 模型几何 -- >
<mesh filename="package://demo_urdf/meshes/bowl.dae"/>
</geometry>
<material name="Cyan"> < !-- 模型材质 -- >
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
</link>
</robot>
<mesh filename="package://demo_urdf/meshes/bowl.dae"/>
package://包名/目录/.dae
- 启动:
roslaunch demo_urdf display.launch model:=geometry_mesh.urdf
- rviz 显示模型
*. 参考
1. xacro
- Xacro (XML Macros) Xacro is an XML macro language. With xacro, you can construct shorter and more readable XML files by using macros that expand to larger XML expressions.
- http://wiki.ros.org/xacro
- 一个 xml 宏
*. 问题解决
1. RLException: roscore cannot run as another roscore/master is already running.
roscore 已经启动问题
解决
8. link 连杆 与 属性
1. link 连杆
在URDF描述性语言中,link是用来描述物理特性的
- 描述视觉属性
- 描述碰撞属性
- 描述物理惯性
<link name="my_link"> < !-- 标签中name属性是 必填项,描述当前连杆名称。多个<link>标签存在时,name必须是唯一。 -- >
<visual></visual> < !-- 标签用来描述视觉显示。选填项 -- >
<collision></collision> < !-- 标签用来描述碰撞属性。选填项 -- >
<inertial></inertial> < !-- 标签用来描述物理惯性。选填项 -- >
</link>
2. visual 视觉属性
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<box size="1 1 1" />
</geometry>
<material name="Cyan">
<color rgba="0 1.0 1.0 1.0"/>
</material>
</visual>
- origin描述的是位置姿态信息。
<origin xyz="0 0 0" rpy="0 0 0" />
- xyz描述的是在大环境中的坐标位置
- rpy描述的是自身的姿态
- mesh指向对应的文件
9. 通用 launch 文件参考
<launch>
<arg name="model" default="geometry_box.urdf"/>
<arg name="gui" default="true" />
<arg name="rvizconfig" default="$(find demo_urdf)/rviz/urdf.rviz" />
<param name="robot_description" command="$(find xacro)/xacro --inorder $(find demo_urdf)/urdf/$(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="state_publisher" />
<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />
</launch>
- 启动了三个节点:
- joint_state_publisher
- robot_state_publisher
- rviz
- 定义了三个变量
- model
- gui
- rvizconfig
*. rough
找机器人描述文件 robot_description,在下图找,但是没有,需要主动设置
设置方式如上,命令如下
可以得到 robot_description 了
for launch file