URDF模型学习

URDF建模方法

在这里插入图片描述

<!-- <link>连杆,主要用来描述机器人某个刚体部分的外观和物理属性 -->
<link name="link_4">
<!--                 <visual>描述外观形态                -->
    <visual>
<!--  <geometry>几何形状,导入solidworks中建好的stl文件 -->
        <geometry>
            <mesh filename="link_4.stl"/>
        </geometry>
<!--   <origin>与坐标变化有关,xyz代表xyz三个方向的移动,米;roll/pitch/yaw表示绕xyz的转动,弧度   -->
        <origin xyz="0 0 0" rpy="0 0 0"/>
    </visual>

<!--             <collision>描述机器人的碰撞参数         -->
    <collision>
        <geometry>
<!-- 简化后的几何形状描述 -->
            <cylinder length="0.5" radius="0.1"/>
        </geometry>
        <origin xyz="0 0 -0.05" rpy="0 0 0" />
    <collision/>
<!--              <inertial>惯性矩阵,此处无              -->
</link>

在这里插入图片描述在这里插入代码片

<!--     <joint>描述两个link之间的关系,有六种类型        -->
<joint name="joint_2" type="revolute">
<!-- 每个joint只能连接两个连杆 -->
    <parent link="link_1"/>
    <child link="link_2"/>
<!-- link_2相对于link_1坐标系的变换 -->
    <origin xyz="0.2 0.2 0" rpy="0 0 0"/>
<!-- 围绕哪个轴旋转,0~1 -->
    <axis xyz="0 0 1"/>
<!--旋转限制,最大弧度,最小弧度,旋转速度-->
    <limit lower="-3.14" upper="3,14" velocity="1.0"/>
</joint>

robot

在这里插入图片描述

手写第一个机器人的URDF模型

创建功能包及文件夹

  1. 在src中创建功能包名为:first_robot_description,并添加依赖:urdf xacro
  2. 在功能包中创建文件夹:urdf(存放机器人的urdf或xacro文件);meshes(放置urdf中引用的模型渲染文件);launch(保存相关启动文件);config(保存rviz的配置文件)

创建urdf模型

<?xml version="1.0" ?>
<robot name="first_robot">

<!--      提前定义颜色    -->
    <material name="Blue">
        <color rgba="0 0 1 1"/>
    </material>
    <material name="Black">
        <color rgba="0 0 0 1"/>
    </material>
    <material name="White">
        <color rgba="1 1 1 0.95"/>
    </material>
    <material name="Yellow">
        <color rgba="1 0.4 0 1"/>
    </material>

<!--      底盘的link     -->
    <link name="base_link">
        <visual>
            <geometry>
                <cylinder length="0.16" radius="0.20"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="Blue" />
        </visual>
    </link>

<!--      创建左右轮     -->
    <link name="left_wheel_link">
        <visual>
            <geometry>
                <cylinder radius="0.06" length="0.025" />
            </geometry>
            <!-- 轮子相对于轮子坐标系的移动 -->
            <!-- 1.5707是90度,将轮子立起来 -->
            <origin xyz="0 0 0" rpy="1.5707 0 0" />
            <material name="Black" />
        </visual>
    </link>

    <joint name="left_wheel_joint" type="continuous" >
        <parent link="base_link"/>
        <child link="left_wheel_link"/>
        <!-- 子坐标系相对于父坐标系的移动 -->
        <origin xyz="0 0.19 -0.05" rpy="0 0 0"/>
        <!-- joint可以绕着y轴旋转 -->
        <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"/>
            </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="front_caster_link">
        <visual>
            <geometry>
                <!-- 圆球 -->
                <sphere radius="0.015"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <material name="Yellow"/>
        </visual>
    </link> 

    <joint name="front_caster_joint" type="fixed">
        <parent link="base_link"/>
        <child link="front_caster_link"/>
        <origin xyz="0.18 0 -0.095" rpy="0 0 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"/>
        </visual>
    </link>

    <joint name="back_caster_joint" type="fixed">
        <origin xyz="-0.18 0 -0.095" rpy="0 0 0"/>
        <parent link="base_link"/>
        <child link="back_caster_link"/>
    </joint>

<!--      创建kinect     -->
    <link name="kinect_link">
        <visual>
            <geometry>
                <mesh filename="package://first_robot_description/meshes/kinect.dae" />
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 1.5708"/>
        </visual>
    </link>

    <joint name="kinect_joint" type="fixed">
        <parent link="base_link"/>
        <child link="kinect_link"/>
        <origin xyz="0.15 0 0.11" rpy="0 0 0"/>
    </joint>
</robot>

launch文件

<launch>
    <!-- 导入robot模型,这样在rviz中加入robotmodel才是该模型,Param name不能改变,因为它在parameter中的名字是固定的 -->
    <param name="robot_description" textfile="$(find first_robot_description)/urdf/first_robot_kinect.urdf" />


    <!-- 运行robot_state_publisher节点,启动tf树,这样才能将各个link和joint坐标系导入并联合 -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />

    <param name="use_gui" value="true" />
    
    <!-- 运行joint_state_publisher节点,发布机器人的关节状态  -->
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />

    <!-- 打开rviz, 并从路径中打开由rviz保存的配置文件,避免下次打开rviz重复配置 -->
    <node name="rviz" pkg="rviz" type="rviz" args="-d $(find first_robot_description)/config/first_robot_config.rviz" required="true" />

</launch>

meshes 文件

kinect文件地址

工具-检查urdf完整性

在urdf文件所在路径打开终端输入:
urdf_to_graphiz <文件名>
结果如下:
在这里插入图片描述

rviz中的相对坐标与绝对坐标

在这里插入图片描述

参考阅读

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值