基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】

目录

  • 一、URDF
    • 1.1 URDF 简介
    • 1.2 URDF 文件标签简介
  • 二、URDF 机器人建模
    • 2.1 创建机器人建模功能包
    • 2.2 编辑 launch 启动文件
    • 2.3 建立 URDF 机器人模型
      • 2.3.1 创建小车模型
      • 2.3.2 增设传感器
      • 2.3.3 检查模型整体结构
  • 三、总结
  • 四、参考资料

本文内容:在 Ubuntu 18.04 虚拟机中,基于安装配置好 ROS Melodic 上,进行 URDF 机器人建模的详细步骤,并配置 camera、kinect、Lidar 这三个传感器。

说明:本文及后面几篇 ROS 文章都是在以下这三篇博客基础之上的延伸:
1、Ubuntu18.04 虚拟机配置 ROS Melodic 详细步骤
2、ROS 三种通信编程入门:【话题通信】【服务通信】【动作通信】
3、Ubuntu 18.04 下使用 RViz 显示出摄像头视频教程
配置好了 ROS工作空间RViz 即可开始学习机器人仿真了。
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

一、URDF

1.1 URDF 简介

  • URDF 全称为 Unified Robot Description Format,中文可以翻译为 “ 统一机器人描述格式 ”。与计算机文件中的 .txt 文本格式、.jpg 图像格式等类似,URDF 是一种基于 XML 规范、用于描述机器人结构的格式。
  • 所以 URDF 到底有什么用呢?设计这一格式的目的在于提供一种尽可能通用(as general as possible)的机器人描述规范。

1.2 URDF 文件标签简介

  • 在 URDF 文件中,使用的是 XML 格式来描述一个机器人模型,而在 ROS 中提供了 URDF 文件的 C++ 解析器。
  • 下图就是一个 URDF 文件的大致内容:
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第1张图片
  • XML 格式的代码,下面简单了解下其中各个主要标签的含义:

< link >标签:

  • 作用:用于描述机器人某个刚体部分的外观和物理属性,如
    1. 尺寸(size)
    2. 颜色(color)
    3. 形状(shape)
    4. 惯性矩阵(inertial matrix)
    5. 碰撞参数(collision properties)等等
  • < link > 内的标签简介:
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第2张图片
标签 简介
inertial 描述机器人 link 的惯性参数
visual 描述机器人 link 部分的外观参数
collision 描述机器人 link 的碰撞属性

< joint >标签:

  • 作用:描述机器人关节的运动学和动力学属性(包括关节运行的位置和速度限制)。
  • 其中关节的六种类型,如下:
关节类型 描述
continuous 旋转关节,可以围绕单轴无线旋转
revolute 旋转关节,类似于continuous,但是有旋转的角度限制
prismatic 滑动关节,沿某一轴线移动的关节,带有位置极限
planar 平面关节,允许在平面正交方向上平移或者旋转
floating 浮动关节,允许进行平移、旋转运动
fixed 固定关节,不允许运动的特殊关节
  • < joint > 内的标签简介:
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第3张图片
标签 简介
calibration 关节的参考位置,用来校准关节的绝对位置
dynamics 描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到
limit 描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等
mimic 描述该关节与已有关节的关系
safety_controller 描述安全控制器参数

< robot >标签:

  • 作用:完整机器人模型的最顶层标签,< link > 和 < joint > 标签都必须包含在 < robot > 标签内。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第4张图片
  • 一个完整的机器人模型,由一系列的 < link > 和 < joint > 组成。
  • 简单了解了后,开始建模。

二、URDF 机器人建模

2.1 创建机器人建模功能包

  • 首先进入之前建立的工作空间,再创建机器人建模的功能包。
cd ./catkin_ws/src/
catkin_create_pkg mbot_description urdf xacro

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第5张图片

  • 创建机器人建模的功能包的文件结构。
cd ~/catkin_ws/src/mbot_description
mkdir urdf
mkdir meshes
mkdir launch
mkdir config
文件名 作用
urdf 存放机器人模型的 URDF 或 xacro 文件
meshes 放置 URDF 中引用的模型渲染文件,机器人外观纹理,让外观和实际更相似
launch 保存相关启动文件
config 保存 rviz 的配置文件、功能包的配置文件

2.2 编辑 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>
  • 保存后,下面开始建模。

2.3 建立 URDF 机器人模型

2.3.1 创建小车模型

2.3.1.1 创建小车底盘

  • 进入 urdf 文件夹下,并创建 mbot_base.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" />
            <!-- link坐标位置,放在最中央 ,xyz单位是米,rpy单位是弧度-->
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            </geometry>
            <!-- 机器人的外观效果,使用圆柱体,高0.16,半径0.20 -->
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
             <!--  通过rgba来描述颜色,颜色命名为yellow,a为1是不透明-->
        </visual>
        <!--visual指的是一些物理属性的标签 -->
    </link>
</robot>
  • 查看显示效果:
roslaunch mbot_description display_mbot_base_urdf.launch
  • 错误一:
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第6张图片
    解决办法:删除代码中的注释部分即可。
  • 错误二:
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第7张图片
    解决办法:使用命令sudo apt-get install ros-melodic-joint-state-publisher-gui下载安装(针对 Melodic 版的 ROS)。
  • 错误三:
    RViz 启动但不显示小车底盘模型。
    解决办法:【Fiexed Frame】参数改为 base_link;同时添加 RobotModel 即可。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第8张图片
  • 关闭 RViz 且不保存即可。

2.3.1.2 创建左侧车轮

  • 编辑 urdf 文件。
sudo gedit mbot_base.urdf

在这里插入图片描述

  • 复制粘贴以下代码(粘贴位置见下图):
    <joint name="left_wheel_joint" type="continuous">
    <!--   joint名字为left_wheel_joint,属性为continuous,即无限旋转-->
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <!--  坐标位置,在base_link基础上,Y偏移0.19,z偏移-0.05-->
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <!--  主关节:base_link,上面的圆柱形车体-->
        <!--  子关节:left_wheel_link,左轮-->
        <!--  主关节最后是一个,本代码是base_link-->
        <axis xyz="0 1 0"/>
        <!--left_wheel_link绕某一个轴做旋转,指定为Y-->
    </joint>
     <!--joint用来连接两个link-->
    <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>
  <!--左轮信息-->
  • 粘贴到 < robot > 下,记得去掉注释。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第9张图片
  • 再次查看显示效果。
roslaunch mbot_description display_mbot_base_urdf.launch
  • 再次提醒这两个位置,修改正常了才能显示模型。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第10张图片
  • 如何查看车体与轮子之间的 TF 坐标值,添加 TF 选项并取消勾选 RobotModel。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第11张图片

2.3.1.3 创建右侧车轮

  • 与创建左侧车轮的步骤雷同,都是编辑 mbot_base.urdf 文件,并在 < robot > 下添加代码即可。
sudo gedit mbot_base.urdf
  • 代码如下:
    <joint name="right_wheel_joint" type="continuous">
        <origin xyz="0 -0.19 -0.05" rpy="0 0 0"/>
        <!--  坐标位置,在base_link基础上,Y偏移-0.19,z偏移-0.05,与左轮正好相反-->
        <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>
  • 查看效果:
roslaunch mbot_description display_mbot_base_urdf.launch
  • 可以鼠标左键按住模型显示区不动,进行拖拽旋转查看。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第12张图片

2.3.1.4 创建前后支撑轮

  • 与创建左侧车轮的步骤雷同,都是编辑 mbot_base.urdf 文件,并在 < robot > 下添加代码即可。
sudo gedit mbot_base.urdf
  • 代码如下:
    <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>
  • 查看效果:
roslaunch mbot_description display_mbot_base_urdf.launch

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第13张图片

2.3.2 增设传感器

2.3.2.1 加入摄像头(Camera)

  • 在 urdf 下创建 mbot_with_camera.urdf 文件。
cd ~/catkin_ws/src/mbot_description/urdf
sudo gedit mbot_with_camera.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>
	<!--摄像头相关内容-->
    <link name="camera_link">
        <visual>
            <origin xyz=" 0 0 0 " rpy="0 0 0" />
            <geometry>
            
                <box size="0.03 0.04 0.04" />
                   <!--外观是个盒子模拟成摄像头,长宽高分别是0.03 0.04 0.04-->
            </geometry>
            <material name="black">
                <color rgba="0 0 0 0.95"/>
            </material>
        </visual>
    </link>

    <joint name="camera_joint" type="fixed">
        <origin xyz="0.17 0 0.10" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="camera_link"/>
    </joint>
</robot>
  • 上面的代码说明一下:方框中的代码就是传感器摄像头的,而方框外的代码都是 2.3.1 部分创建小车模型时的写的,所以相比于 2.3.1 部分的代码,这里只是多了一个摄像头块的代码。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第14张图片
  • 然后进入到 launch 文件夹下,创建 display_mbot_with_camera_urdf.launch 文件。
cd ~/catkin_ws/src/mbot_description/launch
sudo gedit display_mbot_with_camera_urdf.launch
  • 复制粘贴以下代码:
<launch>
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_with_camera.urdf" />
	<param name="use_gui" value="true"/>
	<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 $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • 上面代码说明说一下:相比于 2.2 创建的 launch 文件,这里的 launch 文件只是修改了 url 路径。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第15张图片
  • 查看效果(这里就换了刚刚新建的启动文件执行):
roslaunch mbot_description display_mbot_with_camera_urdf.launch

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第16张图片
2.3.2.2 加入激光雷达(Lidar)

  • 在 urdf 下创建 mbot_with_laser.urdf 文件。
cd ./catkin_ws/src/mbot_description/urdf
sudo gedit mbot_with_laser.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>

    <link name="laser_link">
		<visual>
			<origin xyz=" 0 0 0 " rpy="0 0 0" />
			<geometry>
				<cylinder length="0.05" radius="0.05"/>
			</geometry>
			<material name="black"/>
		</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>

</robot>
  • 上面的代码说明一下:方框中的代码就是传感器雷达的,而方框外的代码都是 2.3.1 部分创建小车模型时的写的,所以相比于 2.3.1 部分的代码,这里只是多了一个雷达块的代码。
  • 如果想机器人既有摄像头又有雷达,那么只需要在 2.3.1 处的代码基础上同时加上摄像头块代码与雷达块的代码即可。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第17张图片
  • 在 launch 下创建 display_mbot_with_laser_urdf.launch 文件。
cd ./catkin_ws/src/mbot_description/launch
sudo gedit display_mbot_with_laser_urdf.launch
  • 复制粘贴以下代码:
<launch>
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_with_laser.urdf" />
	<param name="use_gui" value="true"/>
	<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 $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • 上面的代码说明一下:同样的,这里相比于 2.2 创建的 launch 文件,也只是修改了 url 路径,其它不变。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第18张图片
  • 查看效果(这里就换了刚刚新建的启动文件执行):
roslaunch mbot_description display_mbot_with_laser_urdf.launch

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第19张图片
2.3.2.3 加入体感(Kinect)

  • 在 urdf 下创建 mbot_with_kinect.urdf 文件。
cd ./catkin_ws/src/mbot_description/urdf
sudo gedit mbot_with_kinect.urdf
  • 复制粘贴以下代码(经过上面两个传感器的代码说明,你应该就知道了这个 Kinect 传感器块的代码在哪了,不过还是为了复制方便,就全部贴出来):
<?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>


    <link name="kinect_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 1.5708"/>
            <geometry>
                <mesh filename="package://mbot_description/meshes/kinect.dae" />
            </geometry>
        </visual>
    </link>
    <joint name="laser_joint" type="fixed">
        <origin xyz="0.15 0 0.11" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="kinect_link"/>
    </joint>
</robot>
  • 在 launch 下创建 mbot_with_kinect.urdf 文件。
cd ./catkin_ws/src/mbot_description/launch
sudo gedit mbot_with_kinect.launch
  • 复制粘贴以下代码(这个代码有什么不同,经过上面添加两个传感器时,你就知道了):
<launch>
	<param name="robot_description" textfile="$(find mbot_description)/urdf/mbot_with_kinect.urdf" />
	<param name="use_gui" value="true"/>
	<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 $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
</launch>
  • 查看效果:
roslaunch mbot_description mbot_with_kinect.launch
  • 能运行 RViz 但是会报一个错。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第20张图片
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第21张图片
  • 所需要的 kinect.dae 包可以从这里下载,但是要 VIP,我就不下载了。
    https://download.csdn.net/download/weixin_43262513/10990016

2.3.3 检查模型整体结构

  • 在 urdf 文件夹下执行命令:urdf_to_graphiz + [要检查的 urdf 文件]
  • 比如,我现在要检查 mbot_with_camera.urdf 模型。
urdf_to_graphiz mbot_with_camera.urdf

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第22张图片

  • 根据提示安装 liburdfdom-tools 工具。
sudo apt install liburdfdom-tools

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第23张图片

  • 再在 urdf 文件夹下执行命令:
cd ~/catkin_ws/src/mbot_description/urdf/
urdf_to_graphiz mbot_with_camera.urdf
  • 生成了两个文件。
    基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第24张图片
  • 这里打开其中的 pdf 文件即可查看到(打开 pdf 的命令:evince + [name.pdf])。
evince mbot.pdf

基于 ROS 进行 URDF 机器人建模详细步骤【机器人仿真入门教程一】_第25张图片

三、总结

  • 总的来说,建模过程并不复制,主要是在 urdf 下创建机器人模型,而机器人上的各个部位都是一块一块的代码构成,需要什么传感器或者部位,只需要添加所需要的代码块即可。
  • 不过,要是想创建一个更加个性的机器人,就要深入了解一下 urdf 文件了。
  • URDF 建模完成,可是这种建模方式存在很多缺点,具体问题及优化方法请参考下篇文章:基于 ROS 对 URDF 建模进行 xacro 优化【机器人仿真入门教程二】

四、参考资料

[1] urdf_百度百科
[2] ROS——URDF机器人建模

你可能感兴趣的:(ros,urdf)