ROS 详细讲解URDF机器人建模,配套launch文件,配套meshes文件

配套代码 提取码: 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 

launch运行如下
运行如下发现什么都没有,还有警告信息,点击左下角的Add按钮
RobotModel

选择RobotModel点击ok
结果如下:
结果如下
用鼠标双击两下Fixed Frame 后面的文字,即可编辑输入base_link回车
base_link
运行如下:
运行如下

可以在添加TF按个人喜好左下角点击Add,选择TF点击ok
TF在这里插入图片描述如果觉得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

mbot

原创文章 44 获赞 8 访问量 3873

猜你喜欢

转载自blog.csdn.net/weixin_44692299/article/details/104380624
今日推荐