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

文章目录

  • 01 URDF理论
    • 1.1 什么是URDF
    • 1.2 模型< robot >
      • 1.2.1 < link > element
      • 1.2.2 < joint > element
  • 02 URDF 实践
    • 2.1 创建机器人描述的功能包
    • 2.2 编辑launch启动文件
    • 2.3 配置config文件
    • 2.4 创建URDF模型
    • 2.5 检查URDF模型整体结构
    • 2.6 启动launch文件
    • 2.7 URDF建模存在的问题
  • 03 参考资料

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>

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

  • 描述机器人关节的运动学和动力学属性
  • 包括关节运动的位置和速度限制
  • 根据关节的运动形式,可以将其分为六种类型。
关节类型 描述
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中阶笔记(二):机器人系统设计—URDF机器人建模相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. ROS中阶笔记(十一):ROS 2.0

    ROS中阶笔记(十一):ROS 2.0 文章目录 1 为什要有ROS 2 1.1 ROS 1的特点 1.2 ROS 1的困境 1.3 ROS 2的曙光 1.4 ROS 2的版本进化 1.5 ROS 2 ...

最新文章

  1. 基于Nexys4 DDR的温度数码管实时显示
  2. EISCONN的故事
  3. require无法使用变量_被框架玩坏的孩子们浏览器环境下使用require
  4. [转]Insert, Update, and Delete Destination table with SSIS
  5. python多环境管理_怎样管理多个Python版本和虚拟环境
  6. 力扣404. 左叶子之和(JavaScript)
  7. ubuntu默认面板被删除后的恢复办法
  8. hdu 5504 GT and sequence
  9. 【JAVA】在jar文件中引用图片等外部资源的问题
  10. StackPanel 控件自动出现滚动条
  11. 有哪些管理类书籍值得推荐?
  12. 个人中心网页设计html,超全面!个人中心页面从思考到设计全过程
  13. 英语四级单选测试软件,英语四级报告单选纸质还是电子?选择电子版报告单可能更好...
  14. Unity Mask制作圆形头像
  15. 彻底清理该死的搜狗输入法
  16. 12306网站服务器时间限制,12306网上订票时间限制
  17. HTML 网页打印实现分页打印功能
  18. Splatter Painting
  19. 用邮件联系导师有哪些注意事项需要关注呢?如何选择适合自己的导师呢?
  20. 基于安卓的公司员工考勤系统的设计与实现

热门文章

  1. 如何提高个人博客的访问量
  2. Java-当前对象this
  3. php refcount,php变量引用和计数_refcount_gc和is_ref_gc
  4. 【连载】如何掌握openGauss数据库核心技术?秘诀五:拿捏数据库安全(2)
  5. 新基建时代,腾讯云数据库沿主赛道加速演进
  6. 给数据库减负的八个思路,盘它!
  7. PostgreSQL的常见参数和技巧
  8. 从5个函数带你理解K8s DeltaFIFO
  9. 在数据库中如何查询表的创建时间?
  10. 【程序员自救指南】中关村保洁大叔的一句话竟然帮我转正了