【ROS2】中级:URDF-构建一个可移动的机器人模型

news2024/12/25 23:44:43

目标:学习如何在 URDF 中定义可移动关节。

教程级别:中级

 时间:10 分钟

 目录

  •  头部 Head

  •  夹爪 Gripper

  •  抓取臂 Gripper Arm

  • 其他类型的关节

  •  指定位姿

  •  下一步

在本教程中,我们将修改上一个教程中制作的 R2D2 模型,使其具有可移动的关节。在之前的模型中,所有的关节都是固定的。现在我们将探索另外三种重要的关节类型:连续关节、旋转关节和棱柱关节。

确保在继续之前已安装所有必备组件。有关所需内容的信息,请参阅上一个教程。

再次,本教程中提到的所有机器人模型都可以在 urdf_tutorial 包中找到。

这里是带有柔性关节的新 URDF https://github.com/ros/urdf_tutorial/blob/ros2/urdf/06-flexible.urdf 。您可以将其与以前的版本进行比较,以查看所有更改,但我们只关注三个示例关节。

要可视化和控制此模型,请运行与上一个教程相同的命令:

ros2 launch urdf_tutorial display.launch.py model:=urdf/06-flexible.urdf

但是现在这也会弹出一个 GUI,允许您控制所有非固定关节的值。玩一下模型,看看它是如何移动的。然后,我们可以看看我们是如何做到这一点的。

4b909b6fba5a8e922c9da0fcac53a780.png

 头部

<joint name="head_swivel" type="continuous">
  <parent link="base_link"/>
  <child link="head"/>
  <axis xyz="0 0 1"/>
  <origin xyz="0 0 0.3"/>
</joint>

身体和头部之间的连接是一个连续的关节,这意味着它可以从负无穷大到正无穷大任意角度。车轮也是这样建模的,因此它们可以永远向两个方向滚动。

我们唯一需要添加的附加信息是旋转轴,这里由一个 xyz 三元组指定,它指定了头部将围绕其旋转的向量。由于我们希望它围绕 z 轴旋转,我们指定向量“0 0 1”。

 抓取器

<joint name="left_gripper_joint" type="revolute">
  <axis xyz="0 0 1"/>
  <limit effort="1000.0" lower="0.0" upper="0.548" velocity="0.5"/>
  <origin rpy="0 0 0" xyz="0.2 0.01 0"/>
  <parent link="gripper_pole"/>
  <child link="left_gripper"/>
</joint>

左右夹持器关节都被建模为旋转关节。这意味着它们的旋转方式与连续关节相同,但它们有严格的限制。因此,我们必须包括限制标签,指定关节的上下限(以弧度为单位)。我们还必须为该关节指定最大速度和最大力,但实际值在这里并不重要。

抓取臂

<joint name="gripper_extension" type="prismatic">
  <parent link="base_link"/>
  <child link="gripper_pole"/>
  <limit effort="1000.0" lower="-0.38" upper="0" velocity="0.5"/>
  <origin rpy="0 0 0" xyz="0.19 0 0.2"/>
</joint>

夹持臂是一种不同类型的关节,即棱柱关节。这意味着它沿着一个轴移动,而不是围绕它移动。这种平移运动使我们的机器人模型能够伸展和收回其夹持臂

棱柱臂的限制与旋转关节的限制相同,只是单位是米,而不是弧度。

其他类型的关节

还有另外两种在空间中移动的关节棱柱关节只能沿一个维度移动,而平面关节可以在一个平面或两个维度中移动。此外,浮动关节是不受约束的,可以在任何三个维度中移动。这些关节不能仅用一个数字来指定,因此不包括在本教程中。

指定姿势

当您在 GUI 中移动滑块时,模型在 Rviz 中移动。这是如何做到的?首先,GUI  https://index.ros.org/p/joint_state_publisher_gui/ 解析 URDF 并找到所有非固定关节及其限制。然后,它使用滑块的值发布 sensor_msgs/msg/JointState 消息 https://github.com/ros2/common_interfaces/blob/eloquent/sensor_msgs/msg/JointState.msg 。然后,robot_state_publisher  https://index.ros.org/p/robot_state_publisher/ 使用这些消息来计算不同部分之间的所有变换。然后,生成的变换树用于在 Rviz 中显示所有形状。

 下一步

现在您有了一个明显可用的模型,您可以添加一些物理属性 https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Adding-Physical-and-Collision-Properties-to-a-URDF-Model.html ,或者开始使用 xacro 来简化您的代码 https://docs.ros.org/en/jazzy/Tutorials/Intermediate/URDF/Using-Xacro-to-Clean-Up-a-URDF-File.html 。

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

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

相关文章

港股指数实时行情API接口

港股 指数 实时 行情 API接口 # Restful API https://tsanghi.com/api/fin/index/HKG/realtime?token{token}&ticker{ticker}指定指数代码&#xff0c;获取该指数的实时行情&#xff08;开、高、低、收、量&#xff09;。 更新周期&#xff1a;实时。 请求方式&#xff1a…

并查集 ——(快速判断两个元素是否在同一个集合中)

五、并查集 0、并查集概念 并查集&#xff08;Union-Find&#xff09;是一种用于维护元素分组信息的数据结构。它支持以下两种基本操作: 合并(Union)&#xff1a;将两个不同的集合合并为一个集合。查找(Find)&#xff1a;确定某个元素属于哪个集合。 并查集通常用于解决涉及…

【C++题解】1168. 歌唱比赛评分

问题&#xff1a;1168. 歌唱比赛评分 类型&#xff1a;数组找数 题目描述&#xff1a; 四&#xff08;1&#xff09; 班要举行一次歌唱比赛&#xff0c;以选拔更好的苗子参加校的歌唱比赛。评分办法如下&#xff1a;设 N 个评委&#xff0c;打 N 个分数&#xff08; 0≤每个分…

PointCloudLib MLS算法法线估计 C++版本

测试效果 简介 MLS(Moving Least Squares,移动最小二乘法)算法在法线估计中的应用是一种基于局部数据拟合的技术,它通过对点云中每个点的邻域数据进行多项式拟合来估计该点的法线。以下是MLS算法在法线估计中的详细解释: MLS算法的基本原理 MLS算法是一种无网格的曲线和…

生物素-吡啶-叠氮的组成成分与特性

一、基本信息 中文名称&#xff1a;生物素-吡啶-叠氮 英文名称&#xff1a;Biotin Picolyl Azide CAS号&#xff1a;可能因不同供应商或产品而有所不同&#xff0c;但通常会有一个特定的CAS号与之对应。 分子量&#xff1a;根据产品的具体规格&#xff0c;分子量可能有所不同&a…

六西格玛培训:控制图——洞察过程真相的利器

在追求卓越绩效与持续质量改进的征途中&#xff0c;六西格玛无疑是企业不可或缺的导航灯。作为一套严谨而系统的管理方法&#xff0c;六西格玛不仅帮助企业识别并减少过程中的变异与缺陷&#xff0c;还促进了流程的优化与创新。而在这套强大的方法论中&#xff0c;控制图作为核…

创建通用JS公共模块并发布至npm

title: 创建通用JS公共模块并发布至npm tags: UMD rollup verdaccio npm categories: 模块化 概要内容 创建&#xff1a;JS公共模块 打包&#xff1a;使用rollup 打包公共模块 发布&#xff1a;js公共模块至verdaccio平台 发布&#xff1a;js公共模块至npm平台 如何创建JS公共模…

如何开发一个大模型应用

随着人工智能技术的快速发展&#xff0c;大模型应用已成为许多领域的核心竞争力。大模型应用通常指的是基于大规模数据集训练得到的深度学习模型&#xff0c;具有强大的特征表示能力和泛化性能。本文将详细介绍如何开发一个大模型应用&#xff0c;包括模型设计、数据准备、训练…

Synergy键鼠跨屏幕同步

小记 Synergy 在多台计算机之间使用单个键盘和鼠标&#xff0c;使用一台计算机的键盘、鼠标或触控板来控制附近的计算机&#xff0c;并在它们之间无缝工作 支持Windows Mac Linux 和树莓派&#xff0c;解放桌面空间&#xff0c;减少操作复杂性&#xff0c;多屏操作神器没错了 …

PostgreSQL 中如何处理数据的并发插入和唯一约束的冲突解决?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发插入和唯一约束的冲突解决一、并发插入和唯一约束的基本概念&#xf…

对于GPT-5在一年半后发布的期待!

首先&#xff0c;如果GPT-5真如OpenAI首席技术官米拉穆拉蒂&#xff08;Mira Murati&#xff09;在采访中所透露的那样&#xff0c;在一年半后发布&#xff0c;并在某些领域达到博士级的智能&#xff0c;这无疑将是一个令人振奋的消息。这一预测不仅反映了AI技术的快速发展&…

PostgreSQL 中如何处理数据的并发读写和事务隔离级别选择?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01;&#x1f4da;领书&#xff1a;PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何处理数据的并发读写和事务隔离级别选择一、并发读写的挑战&#xff08;一&#xff0…

SpringBoot之健康监控(Actuator)

1&#xff0c;基本介绍 Spring Actuator 是 Spring Boot 提供的一个扩展模块&#xff0c;用于监控和管理应用程序的生产环境。它通过 HTTP 端点暴露了大量的监控和管理功能&#xff0c;使得开发者可以在运行时查看应用程序的运行状况、配置信息、性能指标等。 主要功能&#…

重生奇迹mu游戏中的防御成功率

在重生奇迹游戏中&#xff0c;玩家通常除了追求高防御能力外&#xff0c;还会关注一种特殊属性——防御成功率。防御成功率的提高可以帮助玩家闪避攻击&#xff0c;并展现出无敌的效果&#xff0c;因此是防御技能的关键表现之一。 在游戏中&#xff0c;角色的防御成功率和敏捷属…

Zymo试剂盒产品目录,你了解过吗?

在加利福尼亚州奥兰治市的一个小车库里诞生&#xff0c;到今天的行业领导者&#xff0c;Zymo Research 的愿景是在生物医学领域产生积极影响&#xff0c;并为人类的更大福祉做出贡献。这一愿景涉及 Zymo Research的各个方面&#xff0c;并自 1994 年以来一直指导着公司的发展、…

Java | Leetcode Java题解之第231题2的幂

题目&#xff1a; 题解&#xff1a; class Solution {static final int BIG 1 << 30;public boolean isPowerOfTwo(int n) {return n > 0 && BIG % n 0;} }

高校节能环保建设

全球能源危机和环境保护问题日益严重。我国高等院校数量多&#xff0c;在校师生人数多。高等院校作为能耗消耗主体及其在校师生作为节能环保理念的重要传播群体&#xff0c;高校节能环保校园建设显得尤为重要。本文就节能环保校园建设中节能、节水和环保三个方面进行了思考&…

可视化作品集(13):智慧交通方向的这组大屏,绝对亮眼。

本期分享智慧交通方向的可视化化大屏&#xff0c;本期的视觉效果绝对亮眼。

ysoserial代码分析-反射

前言&#xff1a; ysoserial作为优秀的反序列化攻击工具&#xff0c;其提供的攻击调用链也是很简单好用&#xff0c;但是一直没有分析过其代码逻辑&#xff0c;最近有空正好分析了一下&#xff0c;对反序列化理解有更好的帮助 代码分析&#xff1a; 其代码中最重要的两个是反…

虚拟机 VMware Workstation- 安装详细步骤

目录 虚拟化概念VMware Workstation 简介一、安装准备1. 安装环境2. 软件下载 二、常见问题1. 虚拟机的【默认位置】会在C盘&#xff0c;盘符内存不够的建议改为D盘或别的盘符2. 验证许可证是否密钥是否成功。进入虚拟机点击【帮助】下的关于VMware Workstation(A)可以查看验证…