1.URDF简介
URDF,全称为统一机器人描述格式(Unified Robot Description Format),是一个基于XML的语法框架,用于在机器人操作系统(ROS)中描述和定义机器人模型。
1.1 URDF标签
既然我们知道URDF是一种基于XML的语法框架,那必然是会使用到标签去描述和定义机器人模型,下面是关于URDF所使用的标签的介绍
URDF内容:
- link 连杆
- joint 关节
- axis 运动学参数
- dynamics 动力学参数
- visual 可视化模型
- collision 碰撞检测模型
1.1.1 link标签
link 标签说明
link标签它定义了机器人的各个刚体部分,如底座、轮子、激光雷达和摄像头等。这些实体部件都是机器人模型中可见的部分,每个部件都对应一个link标签。以下是link标签的一些关键属性:
- 形状和尺寸:通过指定几何特征,如立方体、圆柱体或自定义的3D模型,来定义部件的形状。尺寸则通过几何特征的参数,如长度、宽度和高度来确定。
- 颜色:可以设置部件的颜色,这在视觉呈现上很重要,有助于区分不同的部件或高亮显示特定的部件。
- 惯性矩阵:这个属性描述了部件的质量分布,对于动力学仿真和碰撞效果的准确计算非常关键。
- 碰撞参数:定义了部件在物理仿真中如何与其他物体发生相互作用,包括摩擦系数和弹性系数等。
xml的格式的描述
<link name="<link name>">
<!-- 描述机器人link部分的外观参数, 尺寸、颜色、形状等的外观信息 -->
<inertial>......</inertial>
<!-- 描述link的惯性参数,主要用到机器人动力学的运算部分 -->
<visual>......</visual>
<!-- 描述link的碰撞属性 -->
<collision>......</collision>
</link>
1.1.2 joint标签
在URDF(Unified Robot Description Format)中,joint标签用于描述机器人关节的运动学和动力学属性。
以下是joint标签的xml表示
<joint name="joint1" type="revolute">
<parent link="base_link"/> <!-- 父链接的名称 -->
<child link="link1"/> <!-- 子链接的名称 -->
<origin xyz="0 0 0" rpy="0 0 0"/> <!-- 关节的原点位置 -->
<axis xyz="0 0 1"/> <!-- 关节的运动轴 -->
<limit lower="-1.57" upper="1.57" effort="10" velocity="1"/> <!-- 运动的限制范围、力矩限制和速度限制 -->
</joint>
1.1.3 robot标签
robot标签在URDF中作为根标签使用,以确保XML语法的完整性。
以下是robot标签的XML的格式表示
<robot name="name of the robot">
<link>......</link>
<link>......</link>
<joint>......</joint>
<joint>......</joint>
</robot>
2.URDF的建模实现
首先我们建立一个用来描述机器人建模的功能包,首先创造一个ros的工作空间
mkdir -p ~/catkin_ws/src
初始化工作空间
cd ~/ctakin_ws/src
catkin_init_spacework
初始化完成之后会在catkin_ws/src中创建一个CMakeLists.txt文件
回到刚刚创建的工作空间中,对工作空间进行编译
cd ~/catkin_ws
catkin_make
编译完成之后,catkin_ws中会出现build文件夹和devel文件夹
进入src文件中,建立一个新的功能包
cd ~/catkin_ws/src
catkin_create_pkg mbot_description urdf xacro
进入我们新建的功能包,创建四个文件夹
cd ./catkin_ws/src/mbot_description
mkdir urdf
mkdir meshes
mkdir launch
mkdir config
- urdf :存放机器人模型的URDF或xacro文件
- launch:保存相关启动文件
- config:保存rviz的配置文件、功能包的配置文件
- meshes:放置URDF中引用的模型渲染文件,机器人外观纹理,让外观和实际更相似
创建我们的launch启动文件
cd ./catkin_ws/src/mbot_description/launch
sudo gedit display_mbot_base_urdf.launch
写入以下内容
<launch>
<!-- 加载的参数名字叫robot_description,具体内容是urdf相关模型的路径 -->
<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />
<!-- 设置GUI参数,显示关节控制插件 -->
<param name="use_gui" value="true"/>
<!-- 运行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="state_publisher" />
<!-- 运行rviz可视化界面,保存每次打开之后的相关插件,保存到config文件夹下面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
接下来创建我们的URDF模型
我们创建一个原型底盘的小车
cd ./catkin_ws/src/mbot_description/urdf
sudo gedit mbot_base.urdf
写入以下内容
<?xml version="1.0" ?>
<robot name="mbot">
<link name="base_link">
<visual>
<origin xyz=" 0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="0.16" radius="0.20"/>
</geometry>
<material name="yellow">
<color rgba="1 0.4 0 1"/>
</material>
</visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.06" length = "0.025"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="front_caster_joint" type="continuous">
<origin xyz="0.18 0 -0.095" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_caster_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="front_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
<joint name="back_caster_joint" type="continuous">
<origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="back_caster_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="back_caster_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<sphere radius="0.015" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
</robot>
保存,我们查看一下模型
roslaunch mbot_description display_mbot_base_urdf.launch
如果没有模型显示,可以进行以下步骤
就会出现我们刚刚设计好的模型了