文章目录
配套代码 提取码: 2ri9
创建工作空间
$ mkdir -p ~/catkin_ws/src/
$ cd catkin_ws/src/
$ catkin_init_workspace
$ cd ~/catkin_ws/
$ catkin_make
$ cd src/
$ catkin_create_pkg mbot_description urdf xacro
$ cd mbot_description/
$ mkdir -p urdf
$ mkdir -p meshes
$ mkdir -p launch
$ mkdir -p config
创建urdf文件
$ cd catkin_ws/src/mbot_description/urdf/
$ touch mbot_base.urdf
编辑urdf
将下列代码复制进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 length="0.025" radius="0.06"/>
</geometry>
<material name="while">
<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 length="0.025" radius="0.06"/>
</geometry>
<material name="while">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name = "front_caster_joint" type = "continuous">
<origin xyz = "0.16 0 -0.085" 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.025"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.9"/>
</material>
</visual>
</link>
<joint name = "back_caster_joint" type = "continuous">
<origin xyz = "-0.16 0 -0.085" 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.025"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.9"/>
</material>
</visual>
</link>
<joint name="Kinect_joint" type="fixed">
<origin xyz="0.15 0 0.11" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="Kinect_link"/>
</joint>
<link name="Kinect_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 1.5707"/>
<geometry>
<mesh filename = "package://mbot_description/meshes/kinect.dae"/>
</geometry>
</visual>
</link>
<joint name="laser_joint" type="fixed">
<origin xyz="0 0 0.105" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="laser_link"/>
</joint>
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder radius="0.05" length="0.05"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
</robot >
代码讲解
<?xml version="1.0" ?>
声明该文件XML描述
<robot name="mbot">
</robot>
定义机器人模型的名称为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>
link块,相当于躯干的某个部位
描述一个底盘名称为base_link
origin xyz = “0 0 0” 延坐标系xyz偏移为0
rpy = "0 0 0"延坐标系xyz翻转为0
cylinder length = “0.16” radius = “0.20” 定义一个圆柱,高为0.16米半径为0.2米
material name = “yellow” 定义材料名称为 yellow
color rgba = “1 0.4 0 1” 用rgba前三个参数表示颜色最后一个常数为透明度(0.0到1.0,1为不透明)
<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>
joint相当于连接躯干中的关节点
joint name = “left_wheel_joint” type = “continuous”
关节点名称为left_wheel_joint,continuous的含义是可以无限旋转
origin xyz = “0 0.19 -0.05” 向y轴正向平移19cm,向z轴负向平移5cm
rpy="0 0 0延坐标系xyz翻转为0
parent link = "base_link"连接两端关节的父关节为base_link
child link = "left_wheel_link"连接两端关节的子关节为left_wheel_link
axis xyz = “0 1 0” 绕y轴旋转
编辑urdf配套meshes文件夹里
将配套代码内meshes文件夹直接复制进meshes文件夹里
编辑urdf配套launch文件
将下列代码复制进display_mbot_base_urdf.launch文件中
<launch>
<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="robot_state_publisher" />
<!-- 运行rviz可视化界面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
基本上所以的launch文件都差不多,拿来就只需修改二排参数来配置打开文件的位置
<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_base.urdf" />
运行launch文件
为了防止没设置环境变量可以在~/catkin_ws/src/mbot_description/launch文件目录下打开终端
$ roslaunch ./display_mbot_base_urdf.launch
运行如下
发现什么都没有,还有警告信息,点击左下角的Add按钮
选择RobotModel点击ok
结果如下:
用鼠标双击两下Fixed Frame 后面的文字,即可编辑输入base_link回车
运行如下:
可以在添加TF按个人喜好左下角点击Add,选择TF点击ok
如果觉得xyz坐标轴太粗
选择Marker Scale双击后面的1,输入0.0到1.0的数
如要查看各各关节之间的联系
把RobotModel的√去掉
运行如下
URDF–统一机器人描述格式
link标签
用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。
joint标签
关节类型 | 描述 |
---|---|
continuous | 旋转关节,可以围绕单轴无限旋转 |
revolute | 旋转关节,类似于continuous,但是有旋转角度的限制 |
prismatic | 滑动关节,沿某一轴线滑动关节,带有位置极限 |
planar | 平面关节,允许在平面正交方向上平移或者旋转 |
floating | 浮动关节,允许进行平移、旋转运动 |
fixed | 固定关节,不允许运动的特殊关节 |
URDF功能包
类型 | 描述 |
---|---|
urdf | 用于存放机器人的URDF或者xacro文件 |
meshes | 用于放置URDF中引用的模型渲染文件 |
launch | 用于保存相关启动文件 |
config | 用于保存rivz的配置文件 |
URDF文件检查内容
$ cd catkin_ws/src/mbot_description/urdf/
$ sudo apt-get install liburfdom-tools
$ check_urdf mbot_base.urdf
URDF文件节点关系检查
$ cd catkin_ws/src/mbot_description/urdf/
$ urdf_to_graphiz mbot_base.urdf
打开mbot.pdf