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

1.2.1 < link > element

官网: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部分的;

  • 描述机器人关节的运动学和动力学属性
  • 包括关节运动的位置和速度限制
  • 根据关节的运动形式,可以将其分为六种类型。
  <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>:描述安全控制器参数。保护机器人关节的运动

2 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建模存在的问题

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

3 参考资料

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

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

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

ros如何订阅关节力矩信息_ROS中阶笔记(二):机器人系统设计—URDF机器人建模...相关推荐

  1. ROS中阶笔记(四):机器人仿真—Gazebo物理仿真环境搭建(重点)

    ROS中阶笔记(四):机器人仿真-Gazebo物理仿真环境搭建(重点) 文章目录 1 ros_control 1.1 ros_control安装 2 Gazebo仿真步骤(重点) 2.1 配置物理仿真 ...

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

    ROS中阶笔记(二):机器人系统设计-URDF机器人建模 文章目录 01 URDF理论 1.1 什么是URDF 1.2 模型< robot > 1.2.1 < link > e ...

  3. ROS中阶笔记(六):机器人感知—机器语音

    ROS中阶笔记(六):机器人感知-机器语音 文章目录 1 语音识别理论 2 常用语音功能包 3 科大讯飞SDK 3.1 使用前提 3.2 语音听写 3.3 语音合成 3.4 智能语音助手 4 参考资料 ...

  4. ROS中阶笔记(七):机器人SLAM与自主导航—SLAM功能包的使用

    ROS中阶笔记(七):机器人SLAM与自主导航-SLAM功能包的使用 文章目录 1 机器人必备条件 1.1 硬件要求 1.2 深度信息 1.2.1 激光雷达 1.2.2 kinect 1.3 里程计信 ...

  5. ROS中阶笔记(八):机器人SLAM与自主导航—机器人自主导航

    ROS中阶笔记(八):机器人SLAM与自主导航-机器人自主导航 文章目录 1 ROS中的导航框架 1.1 move_base 1.1.1 基于move_base的导航框架 1.1.2 安装 1.2.3 ...

  6. ROS中阶笔记(五):机器人感知—机器视觉

    ROS中阶笔记(五):机器人感知-机器视觉 文章目录 1 ROS中的图像数据 1.1 二维图像 1.1.1 安装安装usb_cam 1.1.2 显示图像数据 1.2 三维图像(kinect) 2 摄像 ...

  7. ROS中阶笔记(三):机器人仿真—ArbotiX+rviz功能仿真

    ROS中阶笔记(三):机器人仿真-ArbotiX+rviz功能仿真 文章目录 01 机器人URDF模型优化-xacro模型文件 1.1 xacro模型文件 1.2 xacro使用方法 1.3 模型显示 ...

  8. ROS中阶笔记(一):机器人系统设计—ROS系统下连接外部传感器

    ROS中阶笔记(一):机器人系统设计-ROS系统下连接外部传感器 文章目录 01 连接摄像头 1.1 ROS下连接usb_cam 1.1.1 前期准备 1.1.2 问题 1.1.3 安装usb_cam ...

  9. ROS中阶笔记(十):ROS机器人综合应用

    ROS中阶笔记(十):ROS机器人综合应用 文章目录 1 ROS机器人综合应用 1.1 PR2 1.2 PR2实践 1.3 TurtleBot 1.3.1 TurtleBot2实践 1.3.2 Tur ...

最新文章

  1. Python 比特币 教程 之一:创建机器人
  2. python3 telnetlib实现telnet客户端
  3. redis与spring的完全集成
  4. 月均活跃用户达1.3亿,B站高可用架构实践
  5. 如何在AWS亚马逊云上运行Angular应用
  6. 错误代码1500什么意思_啊早安打工人是什么梗???
  7. 函数的动态参数和作用域
  8. 国外NetDevOps资源工具清单分享
  9. pytorch如何用自己训练好的模型预测新的图片类型?
  10. Windows Builder 使用总结
  11. 计算机的三种基础运算,计算机基础知识(计算机的基本运算).ppt
  12. 【Java】JavaSocket编程开发聊天室-客户端核心部分
  13. 读书笔记1|深度学习入门:Machine Learning Yearning
  14. DAGNN – 有向非循环图神经网络
  15. 临时解决新款macbookpro m1pro刘海屏遮住部分菜单栏应用的问题
  16. 【分享】SBO初始化的过程及内容
  17. Virtualbox 学习 — network setting
  18. ERTEC200P-2 PROFINET设备完全开发手册(9-2)
  19. Execution failed for task ‘:zz:transformClassesAndResourcesWithProguardForRelease‘
  20. ubunutu个人配置

热门文章

  1. android全方位性能优化方法
  2. Spring Boot 学习之配置文件 application.yml
  3. springboot链接数据库的bug
  4. IDEA常用的风格设置
  5. asp.net应用程序无法连接oracle数据库,2020:ASP连接Oracle数据库问题的解决过程
  6. 综合实例_为啥要做“三维管线综合”?看个实例就明白
  7. 使用Firebase、Angular 8和ASP.NET Core 3.1保护网站
  8. 使用.net core和abp框架实现动态webapi的简单说明
  9. c# —— 枚举和值的隐藏副作用
  10. SQL——联接分类和本质