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>

aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTAwMjQ4MDU5MDMucG5n.png


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>

aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTAwMjE2MjU4ODYucG5n.png

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


描述机器人关节的运动学和动力学属性

包括关节运动的位置和速度限制

根据关节的运动形式,可以将其分为六种类型。


image.png

 <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是必须存在的


image.png

aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTAwMjE2NTU1NzEucG5n.png


子标签:


< 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功能包下创建几个不同作用的文件夹,如下图所示:

aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTAxODM5NTk0NTQucG5n.png


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的关系分析出来;


aHR0cHM6Ly9naXRlZS5jb20vSVQtY3V0ZS9QaWNiZWQvcmF3L21hc3Rlci9pbWcvaW1hZ2UtMjAyMDA1MTAyMjAxNTU5NjMucG5n.png

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创建VPC和VSwitch
本场景主要介绍如何利用阿里云资源编排服务,定义资源编排模板,实现自动化创建阿里云专有网络和交换机。
阿里云资源编排ROS使用教程
资源编排(Resource Orchestration)是一种简单易用的云计算资源管理和自动化运维服务。用户通过模板描述多个云计算资源的依赖关系、配置等,并自动完成所有资源的创建和配置,以达到自动化部署、运维等目的。编排模板同时也是一种标准化的资源和应用交付方式,并且可以随时编辑修改,使基础设施即代码(Infrastructure as Code)成为可能。 产品详情:https://www.aliyun.com/product/ros/
目录
相关文章
|
1月前
|
XML 算法 自动驾驶
使用URDF和Xacro构建差速轮式机器人模型
前言 本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。 差速轮式机器人:两轮差速底盘由两个动力轮位于底盘左右两侧,两轮独立控制速度,通过给定不同速度实现底盘转向控制。一般会配有一到两个辅助支撑的万向轮。 此次建模,不引入算法,只是把机器人模型的样子做出来,所以只使用 rivz 进行可视化显示。 机器人的定义和构成 机器人定义:机器人是一种自动化的机器,所不同的是这种机器具备一些与人或生物相似的智能能力,如感知能力、规划能力、动作能力和协同能力,是一种具有高级灵活性的自动化机器
67 15
|
2月前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
前言 最近开始接触到基于DDS的这个系统,是在稚晖君的机器人项目中了解和认识到。于是便开始自己买书学习起来,感觉挺有意思的,但是只是单纯的看书籍,总会显得枯燥无味,于是自己又开始在网上找了一些视频教程结合书籍一起来看,便让我对ROS系统有了更深的认识和理解。 ROS的发展历程 ROS诞生于2007年的斯坦福大学,这是早期PR2机器人的原型,这个项目很快被一家商业公司Willow Garage看中,类似现在的风险投资一样,他们投了一大笔钱给这群年轻人,PR2机器人在资本的助推下成功诞生。 2010年,随着PR2机器人的发布,其中的软件正式确定了名称,就叫做机器人操作系统,Robot Op
80 14
|
2月前
|
人工智能 自然语言处理 机器人
智能语音机器人底层系统设计逻辑机器人源码系统逻辑
简介: — 1 —智能客服背景智能语音客服机器人是在传统的客服系统基础上,集成了语音识别、语义理解、知识图谱、深度学习等多项智能交互技术,能准确理解用户的意图或提问,再根据丰富的内容和海量知识图谱,给予用户满意的回答。目前已广泛应用于金融、保险、汽车、房产、电商、政府等多个领域。
|
2月前
|
XML 算法 自动驾驶
ROS进阶:使用URDF和Xacro构建差速轮式机器人模型
【11月更文挑战第7天】本篇文章介绍的是ROS高效进阶内容,使用URDF 语言(xml格式)做一个差速轮式机器人模型,并使用URDF的增强版xacro,对机器人模型文件进行二次优化。
|
2月前
|
自动驾驶 安全 机器人
ROS2:从初识到深入,探索机器人操作系统的进化之路
【11月更文挑战第4天】ROS2的学习过程和应用,介绍DDS系统的框架和知识。
|
3月前
|
传感器 数据可视化 机器人
【ROS速成】半小时入门机器人ROS系统简明教程之可视化系统(三)
半小时入门机器人ROS系统简明教程之可视化系统
115 0
|
2月前
|
人工智能 自然语言处理 算法
具身智能高校实训解决方案 ----从AI大模型+机器人到通用具身智能
在具身智能的发展历程中,AI 大模型的出现成为了关键的推动力量。高校作为培养未来科技人才的摇篮,需要紧跟这一前沿趋势,开展具身智能实训课程。通过将 AI 大模型与具备 3D 视觉的机器人相结合,为学生搭建一个实践平台。
204 64
|
12天前
|
机器学习/深度学习 人工智能 算法
人工智能与机器人的结合:智能化世界的未来
人工智能与机器人的结合:智能化世界的未来
103 32
|
18天前
|
人工智能 自然语言处理 机器人
机器人迈向ChatGPT时刻!清华团队首次发现具身智能Scaling Laws
清华大学研究团队在机器人操作领域发现了数据规模定律,通过大规模数据训练,机器人策略的泛化性能显著提升。研究揭示了环境和对象多样性的重要性,提出了高效的數據收集策略,使机器人在新环境中成功率达到约90%。这一发现有望推动机器人技术的发展,实现更广泛的应用。
72 26
|
2月前
|
算法 机器人 语音技术
由通义千问驱动的人形机器人具身智能Multi-Agent系统
申昊科技人形机器人小昊,集成通义千问多模态大模型的具身智能系统,旨在讲解销售、迎宾表演等场景。机器人通过语音、动作等方式与用户互动,利用云端大语言模型处理自然语言,结合视觉、听觉等多模态感知技术,实现流畅的人机对话、目标追踪、展厅讲解等功能。
238 4
由通义千问驱动的人形机器人具身智能Multi-Agent系统

推荐镜像

更多