【附带源码】机械臂MoveIt2极简教程(三)、URDF/SRDF介绍

news2024/11/19 19:30:08

系列文章目录

【附带源码】机械臂MoveIt2极简教程(一)、moveit2安装
【附带源码】机械臂MoveIt2极简教程(二)、move_group交互
【附带源码】机械臂MoveIt2极简教程(三)、URDF/SRDF介绍


目录

  • 系列文章目录
  • 1. URDF
    • 1.1 URDF相关资源
    • 1.2 小技巧
      • 1.2.1 关节名称
      • 1.2.2 安全限制
      • 1.2.3 碰撞检测
      • 1.2.4 测试URDF
    • 1.3 URDF例子
  • 2. SRDF
    • 2.1 虚拟关节
    • 2.2 被动关节
    • 2.3 组
      • 2.3.1 关节组
      • 2.3.2 连杆组
      • 2.3.3 Serial Chain
      • 2.3.4 组的集合
    • 2.4 末端执行器
    • 2.5 自碰撞
    • 2.6 机器人姿态
    • 2.7 SRDF文件说明
  • 3. 加载URDF和SRDF


在移动机器人中,一般只需要URDF(Unified Robot Description Format)模型描述文件就够了,但是在机械臂操作中,仅仅一个URDF不够,还需要SRDF(Semantic Robot Description Format)。你可以把URDF理解成乐高里面的积木和说明书,有了它,你就可以搭出一个机器人。而SRDF则更像详细说明书。

1. URDF

MoveIt2从URDF中导入一个机械臂,URDF是ROS1\ROS2通用的机器人模型描述格式。

1.1 URDF相关资源

URDF ROS 维基百科:网址链接

URDF教程:网址链接

solidworks URDF插件:网址链接 你可以通过solidworks导出一个URDF的机器人模型。
在这里插入图片描述

1.2 小技巧

下面有几个注意事项,确保你生成的URDF手册能够在moveit2中使用。

1.2.1 关节名称

	关节名称不应该包含特殊字符 -,[,],(,),

1.2.2 安全限制

	机器人关节限位。机械臂的每个关节并不是都能做360°旋转的,就像人的关节一样。因此必须在URDF手册里写明每个关节所对应的限制条件。

举个例子:

<safety_controller k_position="100" k_velocity="1.5" soft_lower_limit="-2.857" soft_upper_limit="2.857"/>

soft_lower_limitsoft_upper_limit描述了该关节的关节位置限制。moveit2将会把这两个参数和hard limits进行对比,选择最保守的值来运行机器人模型。

soft_lower_limit和soft_upper_limit如果是0.0,那么该关节无法旋转移动了。所以每个参数要设置的很合理。

1.2.3 碰撞检测

MoveIt2使用网格来进行碰撞检测。(就是我们常说的栅格地图中的栅格)
URDF允许可视化和碰撞检测的栅格分开设置。通常来说,可视化栅格会更加具体,也更好看,但是碰撞栅格就会简单一点。当检测机械臂连杆是否碰撞时,网格中三角形的数量影响碰撞检测的耗时。一般整个机器人的三角形数量控制在几千个左右。

1.2.4 测试URDF

ROS的URDF包提供了check_urdf工具,可以用来检测你写的URDF文件是否正确。

sudo apt install liburdfdom-tools
check_urdf pr2.urdf

打印信息如下:

robot name is: pr2
---------- Successfully Parsed XML ---------------
root Link: base_footprint has 1 child(ren)
    child(1):  base_link
        child(1):  base_laser_link
        child(2):  bl_caster_rotation_link
            child(1):  bl_caster_l_wheel_link
            child(2):  bl_caster_r_wheel_link
        child(3):  br_caster_rotation_link
            child(1):  br_caster_l_wheel_link
            child(2):  br_caster_r_wheel_link
        child(4):  fl_caster_rotation_link
            child(1):  fl_caster_l_wheel_link
            child(2):  fl_caster_r_wheel_link
        child(5):  fr_caster_rotation_link
            child(1):  fr_caster_l_wheel_link
            child(2):  fr_caster_r_wheel_link
        child(6):  torso_lift_link
            child(1):  head_pan_link
                child(1):  head_tilt_link
                    child(1):  head_plate_frame
                        child(1):  sensor_mount_link
                            child(1):  double_stereo_link
                                child(1):  narrow_stereo_link

也可以可视化输出

urdf_to_graphiz pr2.urdf

会输出有个pdf文件,列出了所有模型信息。

1.3 URDF例子

在ROS社区,有很多的URDF例子可以让你去学习和参考:网址

pr2机器人:适配ros melodic和noetic版本

2. SRDF

SRDF详细配置了关节组,包括默认的机器人配置、碰撞检测信息、机器人位姿变换等。推荐的生成SRDF方式是利用MoveIt Setup Assistant。

2.1 虚拟关节

URDF只描述了机器人的物理关节。但是虚拟关节也是需要的。因为在世界坐标系中,常常要定义机器人连杆之间的位姿变换。对于移动机器人,比如pr2机器人,会有一个灵活可变的虚拟关节连接着机器人和世界坐标;对于固定工业机械臂,会有一个固定虚拟关节连接机械臂和世界坐标。

其实就是world到base_link的关系。

2.2 被动关节

被动关节就是机器人中非驱动的关节。比如移动机器人里面除了差分驱动轮连接的关节以外,都是被动关节。被动关节是在SRDF里面单独设置的,确保他们在运动规划和控制流程中无法被直接控制。

2.3 组

MoveIt2中有一个核心概念:Group(组)。有时叫关节组,或者规划组。组包含多个关节和连杆的集合。

所有的运动规划与控制都是以组作为基本单元进行控制。

2.3.1 关节组

一系列关节组成的组。

每个关节的child link都默认包含在组中。

2.3.2 连杆组

一系列连杆组成的组。

这些连杆的parent joint也会包含在组中。

记忆:一个joint和它的子link是一个整体。

2.3.3 Serial Chain

serial chain是由base_link和tip link以及中间多个关节、连杆组成。头是base_link,尾巴是tip link。

2.3.4 组的集合

组和组之间也可以进行集合,形成更大的组。

2.4 末端执行器

机器人中的某些特定组叫末端执行器。它一般是通过固定关节连接到手臂上。

2.5 自碰撞

默认的自碰撞矩阵生成器会搜索机器人link坐标系上其他的成对links,目的是为了防止碰撞检测,降低运动规划处理时间。当这些成对的links处在碰撞中、未发生碰撞、在默认位置碰撞、相邻连杆条件下,是无法使能的。采样密度规定了检测自碰撞时需要有多少个机器人位姿。高采样密度会耗算力;低采样密度可能会造成关节有更大可能性被禁用。默认值是10000个碰撞检测。

2.6 机器人姿态

SRDF存储了机器人的固定配置。配置都会自带一个字符串类型的id用以区分。id也会被用来恢复配置。

2.7 SRDF文件说明

通用的文件格式如下:

<?xml version="1.0"?>

 <!-- This does not replace URDF, and is not an extension of URDF.
      This is a format for representing semantic information about the robot structure.
      A URDF file must exist for this robot as well, where the joints and the links that are referenced are defined -->
 <robot name="some robot"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1811493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

云计算-期末复习题-选择/判断/填空/简答(1)

目录 填空题/简答题 单选题 多选题 判断题 云计算期末复习部分练习题&#xff0c;下一章会补全。祝大家好好复习&#xff0c;顺利通过课程。 填空题/简答题 >保障云基本安全的对策包括&#xff08;&#xff09;、&#xff08;&#xff09;和&#xff08;&#xff09; &…

[AI Omost] 革命性AI图像合成技术,让你的创意几乎一触即发!

介绍 Omost 是一个创新的项目&#xff0c;它利用大型语言模型&#xff08;LLM&#xff09;的编码能力来生成图像&#xff0c;特别是通过图像合成技术。项目的名称“Omost”发音类似于“almost”&#xff0c;寓意着使用该项目后&#xff0c;用户的图像生成工作几乎可以完成。同…

超详解——python函数定义和调用——小白篇

目录 1. 函数的参数 位置参数&#xff1a; 关键字参数&#xff1a; 默认参数&#xff1a; 2. 关键字参数 3. 参数组 4. 函数重载 5. 函数的返回值 单个返回值&#xff1a; 多个返回值&#xff1a; 6. 函数的内置属性 __name__&#xff1a; __doc__&#xff1a; 7…

重温react-02

shopdemo import React, { Component } from react export default class shopDemo extends Component {state {goods: [{id: 1,name: 商品1,price: 100,number: 0,money: 0},{id: 2,name: 商品2,price: 200,number: 0,money: 0},{id: 3,name: 商品3,price: 300,number: 0,mo…

如何解决 Git 默认不区分文件名大小写和同名文件共存?

修改文件命名的大小写&#xff0c;不会有 git 记录 本文章的例子&#xff1a;将 demo.vue 文件命名改为 Demo.vue 1、在Git项目路径下执行该命令 git config core.ignorecase false &#xff08;1&#xff09;以上方法可以实现 git 区分 demo.vue 与 Demo.vue 文件&#xff0…

【投稿优惠|权威主办】2024年物联网、土木建筑与城市工程国际学术会议(ICITCEUE 2024)

2024年物联网、土木建筑与城市工程国际学术会议&#xff08;ICITCEUE 2024&#xff09; 2024 International Academic Conference on the Internet of Things, Civil Engineering and Urban Engineering&#xff08;ICITCEUE 2024&#xff09; ▶会议简介 2024年物联网、土木建…

【解读】核密度图

def&#xff1a;what 核密度估计&#xff08;Kernel Density Estimation&#xff0c;简称KDE&#xff09;是一种用来估计随机变量概率密度函数的非参数方法 实现&#xff1a;&#xff08;库函数&#xff09;how import seaborn as sns import matplotlib.pyplot as plt# 使用…

开源完全自动化的桌上足球机器人Foosbar;自动编写和修复代码的AI小工具;开源工具,可本地运行,作为Perplexity AI的替代方案

✨ 1: Foosbar Foosbar是一款完全自动化的桌上足球机器人&#xff0c;能与人类玩家对战&#xff0c;具备防守、传球和射门能力。 Foosbar是一个完全自动化的桌上足球机器人&#xff0c;它实现了一侧由机器人控制&#xff0c;另一侧由人类玩家对战的游戏模式。这个机器人能够自…

2024下半年软考高级没有高项,考哪门最容易上岸?

2024上半年软考考试已经结束&#xff0c;有不少小伙伴已经开始准备下半年软考了&#xff0c;但是大家要注意&#xff1a;今年高项仅考上半年一次&#xff0c;下半年考的高级科目只有这四个&#xff08;系分、架构、网规、系规&#xff09;&#xff01; 一、那么这种情况下&…

go语音进阶 多任务

多任务 什么叫 多任务&#xff1f;简单说&#xff1a;就像是操作系统可以同时执行 多个任务。打个比方 你一边使用 浏览器上网&#xff0c;一遍在听MP3, 一边再用 word 赶作业。对于电脑来讲这就是多任务&#xff0c;还有很多任务悄悄的在后台同时运行着&#xff0c;只是桌面上…

npm 添加 electron 安装镜像变量,提交打包速度。

前言&#xff1a;项目中使用 electron-builder&#xff0c;打包运行 npm run build:win 时&#xff0c; electron-builder 默认会从 github 下载 electron 依赖包&#xff0c;导致打包缓慢。可以通过添加 electron 下载镜像地址来解决。 npm config ls -l 查看 npm 所有配置 …

SmartEDA:革新教育电路,点亮学生创新之光!

在当今快速发展的科技时代&#xff0c;电路设计与电子技术的融合已成为教育领域不可或缺的一部分。而SmartEDA作为一款新兴的电路设计工具&#xff0c;正以其独特的优势助力学生创新实践&#xff0c;引领教育界迈向更加智能化的未来。 SmartEDA不仅具备传统电路设计软件的基本…

Redis(十六) 集群

文章目录 前言什么是集群集群模式基本原理哈希求余一致性哈希算法哈希槽分区算法 docker模拟出一个集群集群中节点挂了会怎么办故障判定故障迁移 集群扩容 前言 前面我们学习了 redis 哨兵机制&#xff0c;哨兵机制是为了解决当主节点挂了之后&#xff0c;能够自动进行故障转移…

JVM对象分配和垃圾回收机制

一、对象创建 1.1 符号引用 new 创建一个对象&#xff0c;需要在JVM创建对象。 符号引用&#xff1a;目标对象采用一个符号表示&#xff0c;类A加载的时候&#xff0c;如果成员变量类B还没有被加载进来&#xff0c;采用一个符号&#xff08;字面量&#xff09;来表示&#x…

Linux C语言:指针的运算

一、指针的算术运算 1、指针运算 指针运算是以指针所存放的地址作为运算量而进行的指针运算的实质就是地址的计算 2、指针的算数运算 指针加上整数&#xff0c;指针减去整数, 指针递增&#xff0c;指针递减和两个指针相减。 指针加减一个n的运算: px n px - n 移动步长…

LeetCode | 2879.显示前三行

在 pandas 中&#xff0c;可以使用 head() 方法来读取 DataFrame 的前几行数据。如果想读取指定数量的行&#xff0c;可以在 head() 方法中传入一个参数 n&#xff0c;读取前 n 行 import pandas as pddef selectFirstRows(employees: pd.DataFrame) -> pd.DataFrame:retur…

mybatisplus(原理)使用方法引用的形式获取实体类对应数据库的列名

我们现在正常来看 一个mybatisplus正常的查询语句 我们可以看到 &#xff0c;再如上的代码中 我们使用了 Address&#xff1a;&#xff1a;getuserId 方法引用&#xff0c;但是我们把方法引用改成lambda表达式的形式的时候不会报错&#xff0c;但是运行的时候报错。为什么…

Tkinter 组件详解之Entry

Tkinter 组件详解之Entry Entry(输入框)组件通常用于获取用户的输入文本。 何时使用 Entry 组件? Entry 组件仅允许用于输入一行文本,如果用于输入的字符串长度比该组件可显示空间更长,那内容将被滚动。这意味着该字符串将不能被全部看到(你可以用鼠标或键盘的方向键调…

[2024-06]-[大模型]-[DEBUG]- ollama webui 11434 connection refused

报错&#xff1a;host.docker.internal:11434 ssl:default [Connection refused] 将/etc/systemd/system/ollama.service中加上如下红框两行 Environment"OLLAMA_HOST0.0.0.0" Environment"OLLAMA_ORIGINS*"然后 systemctl daemon-reload systemctl rest…

速卖通测评攻略:轻松提升店铺曝光度和吸引力

在速卖通平台上&#xff0c;产品排名&#xff0c;店铺曝光的提升无疑是所有卖家追求的目标&#xff0c;因为这直接关联着产品曝光量的增加和潜在销售机会的扩大。然而&#xff0c;提升产品排名并非一蹴而就&#xff0c;它需要一系列的策略和技巧。那么&#xff0c;接下来就让我…