• ROS中阶笔记(二):机器人系统设计—URDF机器人建模


    ROS中阶笔记(二):机器人系统设计—URDF机器人建模

    01 URDF理论

    1.1 什么是URDF

    • Unified Robot Description Format,统一机器人描述格式;
    • ROS中一个非常重要的机器人模型描述格式;
    • 可以解析URDF文件中使用XML格式描述的机器人模型;
    • ROS同时也提供URDF文件的C++解析器(可以在C++代码中直接解析URDF机器人模型,好处:在基于模型的计算算法中,可以在代码中调用模型的信息,方便模型计算)

    1.2 模型< robot >

    官网:http://wiki.ros.org/urdf/XML/model

    一个完整的机器人模型,由一系列< link >和< joint >组成

    • 完整机器人模型的最顶层标签
    • < link > 和 < joint >标签必须包含在 < robot > 标签内
    <robot name="pr2">
      <link> ... </link>
      <link> ... </link>
      <link> ... </link>
    
      <joint>  ....  </joint>
      <joint>  ....  </joint>
      <joint>  ....  </joint>
    </robot>
    

    官网:http://wiki.ros.org/urdf/XML/link

    • 描述机器人某个刚体部分的外观和物理属性;
    • 尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞属性(collision properties)等。
    <link name="my_link">
       <inertial>
         <origin xyz="0 0 0.5" rpy="0 0 0"/>
         <mass value="1"/>
         <inertia ixx="100"  ixy="0"  ixz="0" iyy="100" iyz="0" izz="100" />
       </inertial>
    
       <visual>
         <origin xyz="0 0 0" rpy="0 0 0" />
         <geometry>
           <box size="1 1 1" />
         </geometry>
         <material name="Cyan">
           <color rgba="0 1.0 1.0 1.0"/>
         </material>
       </visual>
    
       <collision>
         <origin xyz="0 0 0" rpy="0 0 0"/>
         <geometry>
           <cylinder radius="1" length="0.5"/>
         </geometry>
       </collision>
     </link>
    

    包括3个子标签

    • < inertial >:描述link的惯性参数,主要用到机器人动力学的运算部分;
    • < visual >:描述机器人link部分的外观参数, 尺寸、颜色、形状等的外观信息;
    • < collision >:描述link的碰撞属性,

    link还有一个比较关键的部分,就是坐标系

    Link origin 是起始坐标,整个link创建的时候都是相对 Link origin坐标系创建的;

    1.2.2 < joint > element

    官网:http://wiki.ros.org/urdf/XML/joint

    joint就是用来连接两个具体的link部分的;

    • 描述机器人关节的运动学和动力学属性
    • 包括关节运动的位置和速度限制
    • 根据关节的运动形式,可以将其分为六种类型。
    关节类型 描述
    continuous 旋转关节,可以围绕单轴无限旋转
    revolute 旋转关节,类似于continuous,但是有旋转的角度极限
    prismatic 滑动关节,沿某一轴线移动的关节,带有位置极限
    planar 平面关节,允许在平面正交方向上平移或者旋转
    floating 浮动关节,允许进行平移、旋转运动
    fixed 固定关节,不允许运动的特殊关节
     <joint name="my_joint" type="floating">
        <origin xyz="0 0 1" rpy="0 0 3.1416"/>
        <parent link="link1"/>
        <child link="link2"/>
    
        <calibration rising="0.0"/>
        <dynamics damping="0.0" friction="0.0"/>
        <limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
        <safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
     </joint>
    

    下面图中,蓝色关节表示出一个运动的轴,蓝色关节是可以围绕蓝色的轴旋转的,也就是child这个link是可以围绕joint上下旋转。

    joint是连接两个link,需要分一个主次关系,主关节是parent link,子关节是child link, 在xml形式的描述中这个两个 link是必须存在的

    子标签:

    • < calibration >:关节的参考位置,用来校准关节的绝对位置;
    • < dynamics >:描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到;
    • < limit >:描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等;
    • < mimic >:描述该关节与已有关节的关系;
    • <safety_controller>:描述安全控制器参数。保护机器人关节的运动

    02 URDF 实践

    2.1 创建机器人描述的功能包

    第一步,进入工作空间中的src 功能包目录下,

    $ cd ./catkin_ws/src/
    

    第二步,创建一个机器人建模的功能包

    $ catkin_create_pkg mbot_description urdf xacro
    
    # 机器人模型、描述文件在ROS里,通常的以 机器人名_description
    # 并且需要依赖urdf功能包,解析模型 和 xacro(优化urdf用的)依赖
    

    第三步,在mbot_description功能包下创建几个不同作用的文件夹,如下图所示:

    • urdf:存放机器人模型的URDF或xacro文件
    • meshes:放置URDF中引用的模型渲染文件,机器人外观纹理,让外观和实际更相似,通过三维设计软件导出,放置此文件夹下
    • launch:保存相关启动文件
    • config:保存rviz的配置文件、功能包的配置文件

    2.2 编辑launch启动文件

    主要是加载urdf 并在rviz中显示
    显示机器人模型,基本上修改第一行 urdf文件的路径,即可;

    下面display_mbot _base_urdf.launch文件是在rviz中显示机器人的一种固定形态

    <launch>
        <!-- param是要加载ros的一个参数:robot_description (描述机器人的具体模型)-->
    	<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可视化界面 -->
    	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_urdf.rviz" required="true" />
    </launch>
    
    • joint_state_publisher:发布每个joint(除fixed类型)的状态,而且可以通过UI界面对joint进行控制
    • robot_state_publisher:将机器人各个links、joints之间的关系,通过TF的形式,整理成三维姿态信息发布

    2.3 配置config文件

    在config文件夹下,创建.rviz 配置文件,保存。

    2.4 创建URDF模型

    在urdf文件夹下,创建.urdf文件,保存

    第一步:使用圆柱体创建一个车体模型

    第二步:使用圆柱体创建左侧车轮

    第三步:使用圆柱体创建右侧车轮

    第四步:使用球体创建前后支撑轮

    第五步:创建传感器——摄像头camera、激光雷达laser、Kinect;

    关于Kinect,在meshes文件夹下,创建创建纹理描述文件

    2.5 检查URDF模型整体结构

    在urdf文件夹下,执行 urdf_to_graphiz+要检查的urdf文件

    $ urdf_to_graphiz mbot_with_kinect.urdf 
    

    会在当前路径下创建一个pdf文件,把机器人所有的link和joint的关系分析出来;

    2.6 启动launch文件

    注意:在运行launch文件时,URDF文件中不能有中文注释,删除掉中文注释,否正会报错误;

    $ roslaunch mbot_description display_mbot_base_urdf.launch 
    

    问题一:启动错误

    [ERROR] [1589109861.881993]: Could not find the GUI, install the 'joint_state_publisher_gui' package

    $ sudo apt-get install ros-kinetic-joint-state-publisher-gui
    

    问题二:警告

    这时候可能还会存在一个警告,如果有的话把launch文件中的joint_state_publisher用joint_state_publisher_gui全部替换掉,即可。

    2.7 URDF建模存在的问题

    • 模型冗长,重复内容过多
    • 参数修改麻烦,不便于二次开发
    • 没有参数计算功能

    03 参考资料

    官方教程:http://wiki.ros.org/cn/urdf

    http://wiki.ros.org/urdf/Tutorials

    ARM端安装ROS:http://wiki.ros.org/indigo/Installation/UbuntuARM

    微信公众号:喵哥解说
    公众号介绍:主要研究机器学习、计算机视觉、深度学习、ROS等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!同时还有1200G的Python视频和书籍资料等你领取!!!

  • 相关阅读:
    第五周学习总结
    第四周学习总结
    第三周学习总结
    第二周学习总结
    读《程序是怎样跑起来的》第十二章有感
    读《程序是怎样跑起来的》第十一章有感
    读《程序是怎样跑起来的》第十章有感
    读《程序是怎样跑起来的》第九章有感
    《程序是怎样跑起来的》第九章
    《程序是怎样跑起来的》第八章
  • 原文地址:https://www.cnblogs.com/IT-cute/p/12990162.html
Copyright © 2020-2023  润新知