ROS2自学笔记:URDF机器人建模

一般机器人可以分为以下四个部件:硬件系统,驱动系统,传感系统,控制系统

URDF(统一机器人描述格式):
1 使用xml文件格式
2 包含link和joint,link为刚体部分,joint为连杆,驱动部分

link:
描述机器人外观,物理属性,碰撞体积,每个link会成为一个坐标系

joint
描述两个link间关系,有以下6类:
continuous:绕轴无限旋转
revolute:绕轴旋转,有角度限制
prismatic:沿轴线滑动,有距离上限
fixed:无法一定
floating:允许平移和旋转
planar:允许平面正交向平移旋转
ROS2里平动默认单位为米,转动单位为弧度

<?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>

实现效果在rviz中如下
ROS2自学笔记:URDF机器人建模_第1张图片
ROS2自学笔记:URDF机器人建模_第2张图片
该机器人有一个圆柱底座,两个驱动轮,两个支撑万向轮


声明robot,在robot里面包含link和joint

<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>

声明base_link,及基座
1 这这里内部声明结构外观:

2

<origin xyz=" 0 0 0" rpy="0 0 0" />

在坐标系位置,此时坐标位置和旋转角度都为0

3

<geometry>
   <cylinder length="0.16" radius="0.20"/>
</geometry>

设置形状为圆柱,高0.16m,半径0.20m

4

<material name="yellow">
   <color rgba="1 0.4 0 1"/>
</material>

声明材料名称及颜色(用BGR模型),a代表透明度

<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>

左轮,名称left_wheel_link

1
这里x方向旋转1.5707弧度(90°),使得圆柱体竖直

其余参数和base_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>

基座和左轮连接
1
连接点坐标
2 type=“continuous”
连接类型为continuous
3
parent link为被连接的link,此处为base_link
4
child link为连接并在parent link上运动的link,此处为left_wheel_link

右轮和左轮程序基本相同

前万向轮

<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>

这里注意一点:

<sphere radius="0.015" />

球形声明时只用标明半径,此时0.015米
其他和前面基本相同

在URDF里导入外部模型

	<link name="kinect_link">
        <visual>
            <origin xyz="0 0 0" rpy="0 0 1.5708"/>
            <geometry>
                <mesh filename="package://learning_urdf/meshes/kinect.dae" />
            </geometry>
        </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>

1

  <geometry>
     <mesh filename="package://learning_urdf/meshes/kinect.dae" />
  </geometry>

引入外部一个建模好的零件模型,名称kinect

ROS2自学笔记:URDF机器人建模_第3张图片
查看urdf模型结构:
在urdf文件存储路径下使用命令

urdf_to_graphiz (urdf文件名)

可以得到urdf文件描述的机器人模型示意图pdf,该pdf也在urdf文件存储路径下

注:如果找不到命令,要安装相关工具

sudo apt install liburdfdom-tools

ROS2自学笔记:URDF机器人建模_第4张图片

你可能感兴趣的:(实习记录,ROS2学习笔记,python,统一建模语言)